h:dataTable抛出java.lang.NoClassDefFoundError:javax / servlet / jsp / jstl / sql / Result

时间:2016-04-15 21:10:35

标签: jsf datatable noclassdeffounderror

这是我的表:

<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)

这是如何引起的?如何解决?

1 个答案:

答案 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服务器,例如TomEEWildFly)。

您可以在&#34;安装JSF&#34;中找到正确的JSTL JAR和正确的Maven依赖关系的链接。 our JSF wiki page的一部分。