Spring3——来自JDBCTemplate.getQueryForMap()的NullPointerException
我正在SpringJSP中运行一个自定义标记。我收到以下错误消息Spring3——来自JDBCTemplate.getQueryForMap()的NullPointerException,spring,nullpointerexception,jdbctemplate,custom-tag,Spring,Nullpointerexception,Jdbctemplate,Custom Tag,我正在SpringJSP中运行一个自定义标记。我收到以下错误消息 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
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"));
}
}
如果您使用的是IoC容器,比如Spring的应用程序上下文,那么您永远不应该自己创建托管bean实例。您始终需要从容器中拉出实例,即ApplicationContext。否则,它们将不会使用必要的依赖项进行初始化 现在您应该问的问题是-如何在JSP标记类中获取ApplicationContext实例。答案很简单——看看我说的标准Spring标签是什么意思——去检查那个链接
// Example on how to obtain bean from JSP tag (ignoring context hierarchy)
WebApplicationContextUtils.getRequiredWebApplicationContext(pageContext.getServletContext()).
getBeansOfType(Poll1DAO.class).values().iterator().next();
我缺少了标记的一部分,即您获取Poll1DAO实例的位置。我刚刚编辑了我的帖子,以包括创建Poll1DAO的位置。它是一个实例变量。