【问题标题】:How do I configure JSF url mappings without file extensions?如何配置没有文件扩展名的 JSF url 映射?
【发布时间】:2011-08-17 03:07:08
【问题描述】:

大多数教程都提出了类似于以下 web.xml 的默认 JSF 配置:

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
</context-param>


<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

使用此配置,只有当相应的 URL 以文件扩展名 .jsf 结尾(例如 http://localhost/welcome.jsf)时,Faces Servlet 才能找到我的 web 应用程序中相应的 *.xhtml 文件。是否可以配置 web.xml,使不以 .jsf 结尾的 URL 也使用相同的 *.xhtml 文件作为 JSF 页面处理?

换句话说,我希望有不依赖于服务器端实现的 URL。

【问题讨论】:

    标签: java url jsf jakarta-ee url-rewriting


    【解决方案1】:

    您可以使用过滤器隐藏此扩展程序并使您的 URL SEO 友好。过滤器的一种这样的实现是PrettyFaces。

    例如: 如果你需要http://host:port/yourapp/login 来解决你的login.xhtml 然后在漂亮的过滤器中配置以下方式

    <url-mapping id="login">
        <pattern> /login </pattern>
        <view-id> /legacy/user/login.jsf </view-id>
    </url-mapping>
    

    看看two min video教程

    【讨论】:

      【解决方案2】:

      你可以像这样创建 url 映射 在 WEB-INF 文件夹中创建 faces-config.xml 文件

      <?xml version="1.0" encoding="ISO-8859-1"?>
      
      <faces-config xmlns="http://java.sun.com/xml/ns/javaee"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
                    version="1.2">
      
         <navigation-rule>
              <from-view-id>/jsf/demoapp</from-view-id>
              <navigation-case>
                  <from-outcome>demoapp</from-outcome>
                  <to-view-id>/demoapp.xhtml</to-view-id>
              </navigation-case>
         </navigation-rule>
      
      
      </faces-config>

      在 web.xml 中你必须做 2 个条目

          <servlet>
              <servlet-name>jsfServlets</servlet-name>
              <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
              <load-on-startup>1</load-on-startup>
          </servlet>

          <servlet-mapping>
              <servlet-name>jsfServlets</servlet-name>
              <url-pattern>/jsf/*</url-pattern>
          </servlet-mapping>

      【讨论】:

      • 很高兴知道,但只适用于 jsf 对吧?它不适用于其他 servlet。
      猜你喜欢
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多