如何使用 faces servlet 映射设置 JSF2 <welcome-file>?
Posted
技术标签:
【中文标题】如何使用 faces servlet 映射设置 JSF2 <welcome-file>?【英文标题】:How to set JSF2 <welcome-file> with faces servlet mapping? 【发布时间】:2011-06-04 17:28:42 【问题描述】:我有一个使用 Facelets 的简单 JSF2 应用程序。我的 web.xml 设置如下:-
<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>
如何强制欢迎页面转到登录页面并确保它通过 faces servlet?
如果我使用以下页面显示,但它没有通过faces servlet,因此不会渲染faces组件:-
<welcome-file-list>
<welcome-file>pages/login.xhtml</welcome-file>
</welcome-file-list>
任何帮助表示赞赏!
【问题讨论】:
【参考方案1】:您必须在 login.xhtml 文件旁边创建一个空的 login.jsf 文件。出于某种原因,需要这种 hack 来欺骗 servlet 容器,使其认为您的欢迎文件存在。
注意:提供的响应仍然是使用您的 login.xhtml 文件的 JSF 响应,而不是您创建的空 login.jsf 文件。
【讨论】:
感谢 BalusC 的编辑 - 我回答了我期待的问题,而不是我正在阅读的问题! @BrianLeathem 我永远也找不到它。天知道你在哪里。 :-)【参考方案2】:原始解决方案的附加信息。
这只是版本 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 处理,因为它捕获到 faces 页面的请求,因此它永远不会点击那个空页面。
【讨论】:
以上是关于如何使用 faces servlet 映射设置 JSF2 <welcome-file>?的主要内容,如果未能解决你的问题,请参考以下文章
Faces Servlet - ClassNotFound 异常 [重复]
带有 url 模式“/ *”的 servlet 映射中的 ***Error