javax.faces.DEFAULT_SUFFIX无效

Al2*_*l2x 5 navigation jsf web.xml servlets facelets

我一直在阅读一些关于javax.faces.default_suffix的帖子,但在尝试实现它时没有成功.

使用:jsf 2.0,jboss 7.1,Mojarra 2.1.5

  • 我需要在URL中显示以下内容:localhost:8080/myproject/index.jsf
  • 导航时还需要显示xxx.jsf

web.xml中

<welcome-file-list>
    <welcome-file>/comum/inicio/index.xhtml</welcome-file>
</welcome-file-list>

<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>*.xhtml</url-pattern>  **have tried *.jsf but with no success**
</servlet-mapping>

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.jsf</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

你能帮我解决这个问题吗?谢谢

Bal*_*usC 13

您混合了默认后缀和URL模式的含义.

它javax.faces.DEFAULT_SUFFIX表示您在webapplication中表示JSF文件的物理文件的默认后缀.这在JSF 2.0中默认为.xhtml.如果将其更改为.jsf,则应将所有物理文件重命名some.xhtml为some.jsf.这通常没有任何意义.你不应该这样做,只是完全摆脱上下文的干扰.

的<url-pattern>表示终端用户在请求URL中使用,以调用默认URL图案FacesServlet(其又使用默认后缀配置来定位基于URL的物理文件).您说要*.jsf在URL中使用,但是您已将其设置为*.xhtml.这是不对的,更改默认后缀不是正确的解决方案.

您应该只设置URL模式,而不是默认后缀.

<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>*.jsf</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

这种方式http://localhost:8080/myproject/index.jsf会起作用.

然后还有第三个问题:你完全误解了欢迎文件的目的.它不应该代表主页的路径.它应该代表你想成为了默认文件时,文件夹,如物理文件的文件名/,/foo/,/foo/bar/,请求等.只需将其设置为index.jsf.

<welcome-file-list>
    <welcome-file>index.jsf</welcome-file>
</welcome-file-list>
Run Code Online (Sandbox Code Playgroud)

但是,您应该记住,容器将在继续请求之前验证物理文件是否存在,以便在缺少请求时可以正确显示404错误.由于*.jsf实际上是虚拟URL,该步骤将失败.您可以通过在所需文件夹中放置文件旁边的物理存在但空的 index.jsf文件来欺骗容器来解决这个问题index.xhtml.

http://localhost:8080/myproject/只要您在根文件夹中有一个真实index.xhtml文件和空index.jsf文件,这种方式就可以工作.

更容易就是摆脱虚拟URL并*.xhtml始终坚持下去.

也可以看看: