【问题标题】:Mapping JSF .xhtml files to no extension将 JSF .xhtml 文件映射为无扩展名
【发布时间】:2013-01-04 11:22:35
【问题描述】:

在 JSF 中,我可以将 Faces Servlet 映射到各种 URL 模式。例如。到*.xhtml

我想要的是将 Faces Servlet 映射到 no 扩展。意思是,如果我的 Web 根目录中有一个页面 customers.xhtml,我想使用 http://example.com/customers 请求这个。

我查看了How do I configure JSF url mappings without file extensions? 的问题,这在某种程度上有效,但它需要我单独映射我拥有的每个文件(如果我错了,请纠正我)。

如何将我的所有.xhtml 文件一次性映射到 Faces Servlet,而不必单独映射它们?

【问题讨论】:

    标签: java jsf jsf-2 url-rewriting facelets


    【解决方案1】:

    现在,标准是可能的。 JSF 2.3 解决了这个问题。可以在here 找到一个示例。 JSF release info

    只需在 web.xml 中 JSF 的 servlet 映射中使用 <url-pattern>/pageName</url-pattern>

        <servlet>
          <servlet-name>JSF</servlet-name>
          <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
          <load-on-startup>1</load-on-startup>
        </servlet>
    
        <servlet-mapping>
          <servlet-name>JSF</servlet-name>
          <!-- suffix -->
          <!-- if someone open /other.xhtml instead of /other -->
          <url-pattern>*.xhtml</url-pattern>
    
          <url-pattern>/home</url-pattern><!-- it will map to /home.xhtml -->
          <url-pattern>/other</url-pattern><!-- it will map to /other.xhtml -->
        </servlet-mapping>
    

    【讨论】:

      【解决方案2】:

      使用标准方法是不可能的。您基本上需要自制一个映射到/*servlet filter 并检查当前请求URL 是否为无扩展名,如果是,则对附加文件扩展名的URL 执行RequestDispatcher#forward() 调用(你知道,转发不会像重定向那样修改当前请求 URL)。您还需要自定义 view handler 来为 JSF &lt;h:form&gt;&lt;h:link&gt; 等生成所需的无扩展 URL。

      或者,您可以使用 PrettyFaces 或 OmniFaces 的 FacesViews,这样您就无需重新发明轮子。在 FacesViews 展示页面的底部,您可以找到一些直接指向源代码的简单链接,这些链接可能会给您一些启发。

      【讨论】:

      • 我一直在网上搜索您所说的内容。您是否知道 JSF 的未来版本是否计划考虑这种特性?
      • @João:有concrete plans 将FacesViews 集成到标准JSF 中。但很大程度上取决于 Servlet 4.0 API 和可用时间/资源。
      猜你喜欢
      • 2011-07-21
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 2016-05-06
      • 2011-11-28
      • 1970-01-01
      相关资源
      最近更新 更多