如何使用 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

前端反爬虫策略--font-face 猫眼数据爬取

如何在 Jetty 中的 /* 上映射 servlet 过滤器?

poj 3276 Face The Right Way

Java Server Faces JSF - 谁负责自动生成的 id?