我一直在读一些关于javax.faces.default_suffix的文章,但是在尝试实现它时没有成功。
使用:JSF2.0,JBoss7.1,Mojarra2.1.5
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>请你在这个问题上帮我一下好吗?谢谢
发布于 2013-07-11 16:53:33
您正在混合默认后缀和URL模式的含义。
javax.faces.DEFAULT_SUFFIX表示JSF应用程序中物理文件的默认后缀,该文件表示JSF。这在JSF2.0中默认为.xhtml。如果将其更改为.jsf,则应将所有物理文件从some.xhtml重命名为some.jsf。一般来说,这是没有意义的。你不应该这样做,只需要完全摆脱这个上下文。
<url-pattern>表示enduser必须在请求URL中使用的默认URL模式,以便调用FacesServlet (而FacesServlet又使用默认后缀配置来根据FacesServlet定位物理文件)。您说希望在URL中使用*.jsf,但是您已经将它设置为*.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>这样,http://localhost:8080/myproject/index.jsf就能工作了。
还有第三个问题:您完全误解了欢迎文件的目的。它不应该代表到主页的路径。当请求/、/foo/、/foo/bar/等文件夹时,它应该表示物理文件的文件名。只需将其设置为index.jsf。
<welcome-file-list>
<welcome-file>index.jsf</welcome-file>
</welcome-file-list>但是,您应该记住,容器将在继续请求之前验证物理文件的存在,以便如果不存在,它可以正确地显示404错误。由于*.jsf实际上是一个虚拟URL,该步骤将失败。您可以通过将一个物理存在但为空的 index.jsf文件放在所需文件夹中的index.xhtml文件旁边来欺骗容器来解决这个问题。
这样,只要根文件夹中有一个真正的http://localhost:8080/myproject/文件和一个空的index.jsf文件,那么index.xhtml就可以工作。
更容易的方法是摆脱虚拟URL,一直坚持使用*.xhtml。
另请参阅:
https://stackoverflow.com/questions/17598994
复制相似问题