PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : JSF, Tomcat, Eclipse



BjA
28-02-2008, 16:58
Hallo,
ich arbeite gerade dieses Tutorial durch:
http://www.exadel.com/tutorial/jsf/jsftutorial-kickstart.html

Beim Aufruf im Browser bekomme ich die Meldung das die Datei pages/inputname.jsf nicht existiert. Das ist korrekt, da diese pages/inputname.jsp heißt. Im Tutorial ist dazu dieser Absatz interessant:



If you look at the path for the forward, you'll notice the file suffix is .jsf and not .jsp. This is used here, because in the web.xml file for the application *.jsf is the URL pattern used to signal that the forwarded page should be handled by the JavaServer Faces servlet within Tomcat.


Was müsste nun richtiger weise in der web.xml stehen?

Bei mir steht folgendes:


<!-- Use Documents saved as *.jsf for Facelets-->
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.jsf</param-value>
</context-param>


<!-- Faces Servlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>


<!-- Faces Servlet Mapping -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>


Wäre dankbar für eure Hilfe!

Viele Grüße
Björn

BjA
29-02-2008, 10:40
Habe das Problem mittlerweile beseitigt. Es war ein falscher Eintrag in der faces-config.xml.

Danach hatte ich das Problem das er die jstl.jar benötigte. Diese habe ich hinzugefügt und bekomme nun die folgende Fehlermeldung:



at com.sun.faces.context.ExternalContextImpl.dispatch (ExternalContextImpl.java:415)
at com.sun.faces.application.ViewHandlerImpl.executeP ageToBuildView(ViewHandlerImpl.java:475)
at com.sun.faces.application.ViewHandlerImpl.renderVi ew(ViewHandlerImpl.java:143)
at com.sun.faces.lifecycle.RenderResponsePhase.execut e(RenderResponsePhase.java:110)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:1 00)
at com.sun.faces.lifecycle.LifecycleImpl.render(Lifec ycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServl et.java:266)
29.02.2008 11:32:02 com.sun.faces.lifecycle.Phase doPhase
SCHWERWIEGEND: JSF1054: (Phase ID: RENDER_RESPONSE 6, View ID: /pages/inputname.jsf) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@1a85d 38]
29.02.2008 11:32:02 org.apache.catalina.core.ApplicationDispatcher invoke
SCHWERWIEGEND: Servlet.service() for servlet Faces Servlet threw exception
java.lang.StackOverflowError
at org.apache.catalina.session.StandardSession.isVali d(StandardSession.java:576)
at org.apache.catalina.connector.Request.doGetSession (Request.java:2270)
at org.apache.catalina.connector.Request.getSession(R equest.java:2075)
at org.apache.catalina.connector.RequestFacade.getSes sion(RequestFacade.java:833)
at javax.servlet.http.HttpServletRequestWrapper.getSe ssion(HttpServletRequestWrapper.java:216)
at org.apache.catalina.core.ApplicationHttpRequest.ge tSession(ApplicationHttpRequest.java:545)
at javax.servlet.http.HttpServletRequestWrapper.getSe ssion(HttpServletRequestWrapper.java:216)
at org.apache.catalina.core.ApplicationHttpRequest.ge tSession(ApplicationHttpRequest.java:545)
at javax.servlet.http.HttpServletRequestWrapper.getSe ssion(HttpServletRequestWrapper.java:216)
at org.apache.catalina.core.ApplicationHttpRequest.ge tSession(ApplicationHttpRequest.java:545)


Die letzten 2 Zeilen Wiederholen sich dann endlos.

Hat jemand einen Tipp?

Viele Grüße
BjA

klaus1
17-12-2008, 17:50
Hallo,

Ich habe ein ähnliches problem bei folgendem einfachen Beispiel.
Da ich Abhängigkeiten bei den JSP Seiten in meiner Webanwendung habe, möchte ich meine JSF Seiten mit der Endung *.jsf Verwenden.

Meine Konfiguration sieht wie folgt aus:

Auszug aus meiner web.xml:


<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.jsf</param-value>
</context-param>

<!-- ############# Faces Servlet ############# -->
<servlet>
<servlet-name>JavaServer Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<!-- ############# Mapping ############### -->
<servlet-mapping>
<servlet-name>JavaServer Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>


Meine faces-config.xml:


<faces-config>

<navigation-rule>
<from-view-id>/eingabe.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/ausgabe.jsp</to-view-id>
</navigation-case>
</navigation-rule>

<managed-bean>
<managed-bean-name>Square</managed-bean-name>
<managed-bean-class>com.edu.jsf.bean.SquareBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>

</faces-config>


die JSP Seite (eingabe.jsf):


<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
<title>Berechnung eines Flächeninhaltes</title>
</head>

<body>
<f:view>
<h3>JSF-Beispielanwendung zur Berechnung eines Flächeninhaltes:</h3>
<i>Dieses Programm berechnet aufgrund der Eingabe einer
Seitenlänge den Flächeninhalt eines Quadrates.</i>
<br><br>

<h:form id="inputForm">

Bitte geben Sie eine Seitenlänge ein:
<h:inputText value="#{Square.length}" />

<h:commandButton value="Berechnen" action="success" />

</h:form>

</f:view>
</body>
</html>


Das Problem das ich jetzt dabei habe:
Ich teile über die Einstellung DEFAULT_SUFFIX im Deployment Descriptor mit, dass ich *.jsf Dateien rendern möchte.
Ich kann das ganze auf meinem Websphere 6.0 Server deployen, und dann beim Aufruf der Seite im Browser hab ich das Problem, dass ich keine Eingabe oder Formular vorfinde.
Es wird 1:1 rausgeschrieben und nicht von der JSF Engine gerendert.

wenn ich jedoch meinen DEFAULT_SUFFIX weglasse und auf Endung *.jsp die Seiten benenne klappt alles. Ich bin allerdings in meiner Enterprise Anwendung gebunden, dass ich die Endung *.jsf verwende, da ich Abhängigkeiten in den JSP Seiten habe.

hat jemand eine Idee?

danke,
Klaus