如何配置没有文件扩展名的 JSF url 映射?

2022-09-04 01:24:22

大多数教程都提出了类似于以下 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。


答案 1

您可以使用过滤器来隐藏此扩展名,并使您的URL SEO友好。Filter的一个这样的实现是PrettyFaces

例如:如果您需要解决您的然后,在漂亮的过滤器配置如下方式http://host:port/yourapp/loginlogin.xhtml

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

看看两分钟视频教程


答案 2

你可以创建 url 映射,像这样创建人脸配置.xml文件在 WEB-INF 文件夹中

<?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>

在网络中.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>