首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javax.faces.DEFAULT_SUFFIX不工作

javax.faces.DEFAULT_SUFFIX不工作
EN

Stack Overflow用户
提问于 2013-07-11 16:42:59
回答 1查看 6.4K关注 0票数 5

我一直在读一些关于javax.faces.default_suffix的文章,但是在尝试实现它时没有成功。

使用:JSF2.0,JBoss7.1,Mojarra2.1.5

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

web.xml

代码语言:javascript
复制
<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>

请你在这个问题上帮我一下好吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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模式,而不是默认的后缀。

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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

另请参阅:

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17598994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档