0

いくつかのラジオ ボタンを含む Struts2 JSP に次のフォームがあります。このページには正しく機能するフォームが他に 2 つありますが、これは正しくありません。選択した値が何らかの形で渡されていないと判断しました。それが NullPointerException を取得している理由ですが、なぜそれが起こっているのかわかりません。誰でも私を助けることができますか?これが私のJSPフォームです。

            <s:form action="ProcessPoll3">
                <table>
                    <tr>
                        <td><b><i>Poll #3</i></b></td>
                        <td>How many kids do you have?</td>
                        <td><s:radio name="poll3"
                            list="#{'1':'0.', '2':'1.', '3':'2.', 
                                    '4':'3.', '5':'More than 3.'}" />
                        <s:submit value="Vote Poll #3" align="left" /></td>
                    </tr>
                </table>
            </s:form>

私の DAO クラスは、次の行で呼び出されます (そして、確実に呼び出されています): String poll3; プライベート HttpServletResponse 応答。

public String getPoll3() {
    return poll3;
}

public void setPoll2(String poll3) {
    this.poll3 = poll3;
}

public String execute() {
        Poll3DAO poll3DAO = new Poll3DAO();

        if (poll3DAO.tallyVote(poll3).equals("success")) {
           // Processing goes on here, not relevant to this problem
        }

これは、DAO クラスのメソッドです。渡されるはずのパラメーターが null だったため、ブレークダウン ポイントがマークされています。

public String tallyVote(String vote) {
    String successfulWrite;
    request = ServletActionContext.getRequest();
    SessionFactory sessionFactory = (SessionFactory) request.getSession()
            .getServletContext().getAttribute("sessionFactory");
    Session session = sessionFactory.openSession();
    try {
        // Get previous results
        Transaction tx1 = session.beginTransaction();
        Query myQuery = session.createQuery("from Poll3");
        tx1.commit();

        // Update results
        Iterator<Poll3> iterate = myQuery.iterate();
        Poll3 poll3 = iterate.next();
        // NullPointerException occurs on next line
        if (vote.equals("1")) {
            poll3.setZero(poll3.getZero() + 1);
        } else if (vote.equals("2")) {
            poll3.setOne(poll3.getOne() + 1);
        } else if (vote.equals("3")) {
            poll3.setTwo(poll3.getTwo() + 1);
        } else if (vote.equals("4")) {
            poll3.setThree(poll3.getThree() + 1);
        } else if (vote.equals("5")) {
            poll3.setMoreThanThree(poll3.getMoreThanThree() + 1);
        }

        // Write new results back to database;
        Transaction tx2 = session.beginTransaction();
        session.update(poll3);
        tx2.commit();
        successfulWrite = "success";
    } catch (Exception e) {
        System.out.println(e.toString());
        successfulWrite = "failure";
    }

    return successfulWrite;
}
4

1 に答える 1

1

私はそれがこれだと確信しています:

public void setPoll2(String poll3) { ... }

これが、このようなカット アンド ペーストの BLOB の記述を避けるために、マップ/コレクションのサポートがある理由です。

スニペットのようにコードを切り貼りしていることに気付くときはいつでも、それは通常、抽象化が無視/見落とされているためです。

于 2012-06-26T21:31:44.263 に答える