2016-04-15 7 views
0

Dies ist meine Tabelle:h: datatable gibt java.lang.NoClassDefFoundError: javax/Servlet/jsp/jstl/SQL/Ergebnis

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

Wenn eine Seite mit dieser Seite zu öffnen, ich diese Ausnahme erhalten:

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) 

Wie wird das verursacht und wie kann ich es lösen?

Antwort

0

JSF hat eine Abhängigkeit von JSTL für verschiedene Dinge. Einer von ihnen untersucht, welche DataModel hinter <h:dataTable value> verwendet werden sollte. Es unterstützt auch JSTL <sql:query var="result"> (von dem seit einem Jahrzehnt abgeraten wird, aber das beiseite).

Offenbar betreiben Sie einen barebones Servletcontainer anstelle eines echten Java EE-Servers. Der Stack-Trace deutet darauf hin, dass es Tomcat ist. Es werden nur Servlets, JSP, EL und WS ausgeliefert. Es werden nicht alle anderen Java EE-Komponenten wie JSF, JSTL, CDI, EJB, JPA, JTA, JMS, etc. usw. ausgeliefert. Sie müssen es manuell installieren (oder einfach zu einer echten Java EE wechseln) Server wie TomEE oder WildFly).

Sie können einen Link zu dem richtigen JSTL JAR und der richtigen Maven-Abhängigkeit in "Installing JSF" Abschnitt von our JSF wiki page finden.

+0

Danke, mit TomEE Server funktioniert :) –