2010-12-20 17 views
2

Ich versuche ein einfaches Projekt auf jboss arbeiten, aber ich bin bei diesem Fehler stecken (Ich habe bereits versucht, .jsf auf der URL). die Anwendung in tomcat Arbeit des feinenjavax.faces.FacesException: java.lang.RuntimeException: Konnte nicht gefunden werden FacesContext

javax.servlet.ServletException: java.lang.RuntimeException: Cannot find FacesContext 
javax.faces.webapp.FacesServlet.service 

root cause 

javax.faces.FacesException: java.lang.RuntimeException: Cannot find FacesContext 
org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:425) 
org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:211) 
org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41) 
org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132) 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:140) 
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96 

meine web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
     version="2.4"> 
<listener> 
    <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class> 
</listener> 

<servlet> 
    <servlet-name>javax.faces.FacesServlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>javax.faces.FacesServlet</servlet-name> 
    <url-pattern>*.faces</url-pattern> 
    </servlet-mapping> 
    <filter> 
    <filter-name>faces-redirect-filter</filter-name> 
    <filter-class>core.FacesRedirectFilter</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>faces-redirect-filter</filter-name> 
    <url-pattern>*.jsp</url-pattern> 
    </filter-mapping> 

    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 
</web-app> 

Gesichter-config xml

<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE faces-config PUBLIC 
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" 
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">  

<faces-config> 
    <managed-bean> 
    <managed-bean-name>resumeBean</managed-bean-name> 
    <managed-bean-class>core.ResumeBean</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
    </managed-bean> 
    <managed-bean> 
    <managed-bean-name>colorBean</managed-bean-name> 
    <managed-bean-class>core.ColorBean</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
    <navigation-rule> 
    <from-view-id>/customize.jsp</from-view-id> 
    <navigation-case> 
     <from-outcome>same-color</from-outcome> 
     <to-view-id>/WEB-INF/results/same-color.jsp</to-view-id> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>success</from-outcome> 
     <to-view-id>/WEB-INF/results/show-preview.jsp</to-view-id> 
    </navigation-case> 
    </navigation-rule> 
    <navigation-rule> 
    <from-view-id>/customize-bg.jsp</from-view-id> 
    <navigation-case> 
     <from-outcome>success</from-outcome> 
     <to-view-id>/WEB-INF/results/show-preview2.jsp</to-view-id> 
    </navigation-case> 
    </navigation-rule> 
</faces-config> 
+0

Nicht genügend Informationen. Wie lautet die URL, die Sie besuchen möchten? Wie lautet der Speicherort/Inhalt der Datei, von der Sie erwarten, dass sie aufgelöst wird? Aus Ihrer Filterzuordnung scheint es, dass Sie eine URL mit der Endung '.faces' aufrufen müssen, damit das FacesServlet die Anfrage bearbeiten kann (einschließlich der Init eines FacesContext). – bug

Antwort

3

javax.faces.FacesException: java.lang.RuntimeException: Kann nicht find FacesContext

JSF-Komponenten auf der JSP-Seite beschweren sich, dass die FacesContext nicht gefunden werden kann. Derjenige, der dafür verantwortlich ist, ist der FacesServlet. Hier

,

<servlet-mapping> 
    <servlet-name>javax.faces.FacesServlet</servlet-name> 
    <url-pattern>*.faces</url-pattern> 
</servlet-mapping> 

Sie haben die FacesServlet erklärte auf einer url-pattern von *.faces zu hören. Um also die FacesServlet zu starten (und die FacesContext zu erstellen), müssen Sie sicherstellen, dass die Anforderungs-URL http://example.com/context/page.faces und damit nichthttp://example.com/context/page.jsp entspricht.

Wenn Sie lieber wollen http://example.com/context/page.jsf verwenden, dann müssen Sie die url-pattern des FacesServlet zu *.jsf ändern.


Das sagte, die FacesRedirectFilter ist auch verdächtig. Ist es nicht Umleitung *.jsp zu *.jsf oder so? Wenn ja, müssen Sie auch diesen Filter ändern. Wenn jedoch der alleinigen Absicht, damit die Benutzer den Zugriff auf *.jsp Dateien direkt ohne Beteiligung von FacesServlet ist, dann fügen Sie besser die folgende Sicherheitsbeschränkung auf die web.xml:

<security-constraint> 
    <display-name>Restrict direct access to JSP files</display-name> 
    <web-resource-collection> 
     <web-resource-name>JSP files</web-resource-name> 
     <url-pattern>*.jsp</url-pattern> 
    </web-resource-collection> 
    <auth-constraint /> 
</security-constraint> 

(und entfernen, dass Filter).


keinem Zusammenhang mit dem Problem, Sie erwähnten JSF 1.2, aber Sie haben Ihre faces-config.xml als JSF 1.1 erklärt. Jede JSF 1.2-Implementierung oder neuer wird auf JSF 1.1-Kompatibilität zurückgreifen. Sie müssen es auch als JSF 1.2 deklarieren.

<faces-config version="1.2" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xi="http://www.w3.org/2001/XInclude" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> 

(und diese DOCTYPE loszuwerden)

Verwandte Themen