这是我的表:
<h:dataTable value="#{registerS.students}" var="registerS.student">
<h:column>
<f:facet name="header">Name</f:facet>
#{registerS.student.userName}
</h:column>
<h:column>
<f:facet name="header">Surname</f:facet>
#{registerS.student.userSurname}
</h:column>
<h:column>
<f:facet name="header">email</f:facet>
#{registerS.student.email}
</h:column>
<h:column>
<f:facet name="header">password</f:facet>
#{registerS.student.password}
</h:column>
<h:column>
<f:facet name="header">classCode</f:facet>
#{registerS.student.classCode}
</h:column>
</h:dataTable>
使用此页面打开页面时,我遇到了以下异常:
java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/sql/Result
javax.faces.component.UIData.getDataModel(UIData.java:1822)
javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
javax.faces.component.UIData.setRowIndex(UIData.java:473)
com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:82)
javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:869)
javax.faces.component.UIData.encodeBegin(UIData.java:1133)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1854)
javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:894)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:443)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
这是如何引起的?如何解决?
答案 0 :(得分:0)
JSF依赖于JSTL。其中一个是检查DataModel
后面应该使用<h:dataTable value>
。它还支持JSTL <sql:query var="result">
(自十年以来不鼓励,但除此之外)。
显然,您正在运行一个准系统servlet容器而不是真正的Java EE服务器。堆栈跟踪暗示它是Tomcat。它只包含Servlets,JSP,EL和WS。它没有提供所有其他Java EE的东西,如JSF,JSTL,CDI,EJB,JPA,JTA,JMS等等。你必须手动安装它(或者只是移动到真正的Java EE服务器,例如TomEE或WildFly)。
您可以在&#34;安装JSF&#34;中找到正确的JSTL JAR和正确的Maven依赖关系的链接。 our JSF wiki page的一部分。