错误:在ExternalContext中找不到/login.xhtml作为资源

时间:2012-10-30 22:40:06

标签: jsf url-pattern

我正在使用带有JSF 2.1 / Prime Faces的JBoss 7.1并继续遇到标题中列出的错误。我已经尝试了很多这里提出的建议,但最终都出现了同样的错误。

文件结构是:

WEB-INF
   faces
      login.xhtml

我在web.xml中有以下内容:

<display-name>clientAccountManager</display-name>
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>
<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

我正在使用以下网址访问该文件:

http://localhost:8080/clientAccountManager/faces/login.xhtml

我还将网址格式更改为* .xhtml并使用:

http://localhost:8080/clientAccountManager/login.xhtml

具有相同的结果。

我错过了什么?

1 个答案:

答案 0 :(得分:40)

你犯了两个错误。

  1. /WEB-INF文件夹用于配置文件,包含文件,模板文件,标记文件等,这些文件应该是隐藏的,不能直接访问,不能用于公共可访问的文件。将可公开访问的文件放在/WEB-INF文件夹之外。

  2. /faces文件夹根本不应该使用。 /faces/*上的虚拟FacesServlet网址格式并不意味着您应该拥有这样的物理文件夹。删除它。

  3. 所以,所有这一切,只是

    WebContent
     |-- META-INF
     |-- WEB-INF
     |    |-- faces-config.xml
     |    `-- web.xml
     `-- login.xhtml
    

    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    

    http://localhost:8080/clientAccountManager/login.xhtml
    

    应该这样做。

    另见: