Al2*_*l2x 5 navigation jsf web.xml servlets facelets
我一直在阅读一些关于javax.faces.default_suffix的帖子,但在尝试实现它时没有成功.
使用:jsf 2.0,jboss 7.1,Mojarra 2.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>
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始终坚持下去.
| 归档时间: |
|
| 查看次数: |
5816 次 |
| 最近记录: |