2010-12-20 3 views
2

私はjbossで作業する簡単なプロジェクトを試していますが、このエラーで止まっています(既にURLで.jsfを使ってみました)。細かいTomcatの作品の中にアプリケーションjavax.faces.FacesException:java.lang.RuntimeException: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 

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

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

ない十分な情報。訪問しようとしているURLは何ですか?あなたが解決すると期待しているファイルの場所/内容は何ですか? フィルタマッピングでは、FacesServletがリクエストを処理するために '.faces'で終わるURLを訪れる必要があります(FacesContextのinitを含みます) – bug

答えて

3

javax.faces.FacesException:java.lang.RuntimeException:することはできませんFacesContextを見つける

JSPページ内のJSFコンポーネントがFacesContextが見つからないと不平を言っています。これを作成する担当者はFacesServletです。ここで

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

あなたは*.facesurl-patternでリッスンするFacesServletを宣言しました。したがって、FacesServletを実行して(FacesContextを作成するには)、リクエストURLがhttp://example.com/context/page.facesと一致するようにして、http://example.com/context/page.jspでないことを確認する必要があります。

http://example.com/context/page.jsfを使用する場合は、のurl-pattern*.jsfに変更する必要があります。


つまり、FacesRedirectFilterは疑わしいです。 *.jsp*.jsfにリダイレクトしていないのですか?その場合は、そのフィルタも変更する必要があります。

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

(およびそのFilterを削除):しかし、唯一の意図は、FacesServletの関与なしに直接*.jspファイルにアクセスするからユーザーを防ぐため、その後、より良いweb.xmlに次のセキュリティ制約を追加する場合。問題に関係のない


、あなたはJSF 1.2を述べていますが、JSF 1.1のように、あなたのfaces-config.xmlを宣言しました。 JSF 1.2の実装以降は、JSF 1.1との互換性を失うことになります。 JSF 1.2として宣言する必要があります。

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

(およびそのDOCTYPEを取り除く)

関連する問題