2011-05-28 41 views
2

我使用了Google搜索,但找不到解決方案。它來自Core JSF 3rd。'#{customer.all}'讀取帶有根本原因的類型爲com.corejsf.CustomerBean的'all'時出錯java.lang.NullPointerException

我所做的:

1)包括JSF鑽嘴魚科在構建路徑。

2)包含在生成路徑中的MySQL JDBC驅動程序

3)將MySQL JDBC驅動程序複製到Tomcat「lib」文件夾和「ext」JDK文件夾中。

4)我用小型Java應用測試了JDBC驅動程序併成功。

CustomerBean從corejsf源代碼:

public class CustomerBean { 
    @Resource(name="jdbc/corejsf") 
    private DataSource source; 

    public ResultSet getAll() throws SQLException { 
     Connection conn = source.getConnection(); 
     try { 
      Statement stmt = conn.createStatement(); 
      ResultSet result = stmt.executeQuery("SELECT * FROM Customers"); 
      // return ResultSupport.toResult(result); 
      CachedRowSet crs = new com.sun.rowset.CachedRowSetImpl(); 
      // or use an implementation from your database vendor 
      crs.populate(result); 
      return crs; 
     } finally { 
      conn.close(); 
     } 
    } 
} 

錯誤:

SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/DatabaseTest] threw exception [/index.jsp(12,3) '#{customer.all}' Error reading 'all' on type com.corejsf.CustomerBean] with root cause 
java.lang.NullPointerException 
    at com.corejsf.CustomerBean.getAll(CustomerBean.java:18) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:87) 
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67) 
    at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72) 
    at org.apache.el.parser.AstValue.getValue(AstValue.java:169) 
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189) 
    at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:106) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190) 
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178) 
    at javax.faces.component.UIData.getValue(UIData.java:554) 
    at javax.faces.component.UIData.getDataModel(UIData.java:1248) 
    at javax.faces.component.UIData.setRowIndex(UIData.java:447) 
    at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81) 
    at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:823) 
    at javax.faces.component.UIData.encodeBegin(UIData.java:937) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1611) 
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:168) 
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616) 
    at com.sun.faces.application.view.JspViewHandlingStrategy.doRenderView(JspViewHandlingStrategy.java:420) 
    at com.sun.faces.application.view.JspViewHandlingStrategy.renderView(JspViewHandlingStrategy.java:209) 
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126) 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:317) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:204) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:182) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:311) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
+0

從'CustomerBean.java:18'拋出異常。你的列表中有哪一行? – meriton 2011-05-28 12:21:58

+0

Connection conn = source.getConnection(); – Emerald214 2011-05-28 12:23:54

回答

0

我懷疑數據源不注入,因爲沒有在你的類路徑解釋@Resource註解。據我所知,@Resource是一個EJB註釋,但Tomcat沒有EJB容器。嘗試以編程方式查找數據源。

+0

但它來自本書的源代碼(在「tomcat」文件夾中)。我認爲這不是原因。 – Emerald214 2011-05-28 12:41:54

相關問題