2011-01-06 66 views
20

我有一个简单的使用Facelets的JSF2应用程序。我的web.xml文件中设置如下: -如何使用faces servlet映射设置JSF2 <welcome-file>?

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

我想设置应用程序为默认欢迎页面这是/pages/login.xhtml。当我进入浏览器的上下文根目录时,我似乎无法获得欢迎文件设置。

我的web.xml欢迎设置如下: -

<welcome-file-list> 
<welcome-file>/pages/login.jsf</welcome-file> 
</welcome-file-list> 

如何强制欢迎页转到到登录页面,并确保它穿过面的servlet?

如果我用下面的页面显示却一直没有通过Faces servlet的消失等Faces组件不会呈现: -

<welcome-file-list> 
<welcome-file>pages/login.xhtml</welcome-file> 
</welcome-file-list> 

任何帮助表示赞赏!

回答

22

您必须创建一个空的login.jsf文件,与您的login.xhtml文件相邻。出于某种原因,这种破解需要欺骗servlet容器,使其认为你的欢迎文件存在。

注意:响应服务仍然是使用您的login.xhtml文件的JSF响应,而不是您创建的空的login.jsf文件。

+3

感谢您的编辑BalusC - 我回答了我期待的问题,而不是我正在阅读的问题! – 2011-01-07 03:07:19

1

原始解决方案的附加信息。

这只是对版本3之前的servlet容器的向后兼容性需求。例如,在Glassfish 3.1或Tomcat 7下运行后,不再需要这样的空文件。我运行了测试,以验证使用Tomcat 6和Tomcat 7.在过去,我已经使用Glassfish进行了测试,并且假设Tomcat 6问题正在发挥作用,因为我们当前在Tomcat 6中运行我们的软件,并且它不是3.0 servlet容器。我一直在使用带有重定向的JSP页面,但是在完全转移到facelets之后,我不喜欢剩下一个留在JSP页面上。这是一个很好的解决方案,直到我们运行在3.0 servlet容器中。它工作的真正原因是所有的事情都是通过WEB.XML条目完成的,它检查文件是否存在。真正的工作是通过JSF处理的,因为它捕捉到面对页面的请求,因此它从不会碰到任何空白页面。