0

Spring JSP でカスタム タグを実行しています。次のエラー メッセージが表示されます。

java.lang.NullPointerException
    com.dao.Poll1DAO.getVotes(Poll1DAO.java:27)
    com.tags.Poll1Tag.doTag(Poll1Tag.java:23)
    org.apache.jsp.WEB_002dINF.pages.PollPage_jsp._jspx_meth_myTag1_005fpoll1_005f0(PollPage_jsp.java:602)
    org.apache.jsp.WEB_002dINF.pages.PollPage_jsp._jspService(PollPage_jsp.java:195)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1265)
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1016)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:965)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:859)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:883)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:781)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

これが Poll1DAO.getVotes() です。

public HashMap<String, Object> getVotes() {
    // following line is line 27, referenced in error message
    return (HashMap<String, Object>) this.getJdbcTemplate().queryForMap(
            "select yes, no from poll1 where id = 1");
}

これが Poll1Tag.doTag() です。

Poll1DAO poll1DAO = new Poll1DAO();

public void doTag() throws JspException, IOException {
    PageContext pageContext = (PageContext) getJspContext();
    boolean foundCookie = cookieFound();

        pageContext.setAttribute("foundCookiePoll1", foundCookie);
        if (foundCookie) {
            // following line is line 23, referenced in error message
            HashMap<String, Object> poll1Votes = poll1DAO.getVotes();
            pageContext.setAttribute("poll1Yes", (int) poll1Votes.get("yes"));
            pageContext.setAttribute("poll1No", (int) poll1Votes.get("no"));
        }
}
4

1 に答える 1

0

Spring のアプリケーション コンテキストなどの IoC コンテナーを使用している場合は、マネージド Bean インスタンスを自分で作成しないでください。常にコンテナからインスタンスを引き出す必要がありますApplicationContext。そうしないと、必要な依存関係で初期化されません。

ここで質問する必要があるApplicationContextのは、JSP タグ クラスでインスタンスを取得するにはどうすればよいかということです。答えは簡単です。標準の Spring タグがそれをどのように行っているかを見てください (つまり、そのリンクを確認してください)。

// Example on how to obtain bean from JSP tag (ignoring context hierarchy)
WebApplicationContextUtils.getRequiredWebApplicationContext(pageContext.getServletContext()).
        getBeansOfType(Poll1DAO.class).values().iterator().next();
于 2013-05-19T17:13:58.717 に答える