您可以使用 Seam 的内置 URL 重写,或者如果您希望重写规则更加灵活,您可以使用来自 http://tuckey.org/urlrewrite/ 的 UrlRewriteFilter。以下两者的示例:
Seam 的内置重写(很可能在幕后使用 tukey 过滤器)
首先在components.xml文件中开启url重写
<web:rewrite-filter view-mapping="*.seam"/>
接下来,将重写规则添加到 pages.xml 文件中
<page view-id="/home.xhtml">
<rewrite pattern="/home/{category}/{sub-category}/{sub-sub-category}" />
</page>
在这种情况下,传入的 url 用作
/home/vehicles/cars/fords
将被视为请求
/home.seam?category=vehicles&sub-category=cars&sub-sub-category=fords
同样,如果页面有可用的命名请求参数,则出站 url 将被转换。
或者你可以使用Tucky UrlRewriteFilter如下
将 Tuckey UrlRewriteFilter jar 添加到您可以从这里获取的项目中
http://tuckey.org/urlrewrite/
接下来将过滤器添加到您的 web.xml 文件中
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
最后将一个名为 urlrewrite.xml 的文件添加到您的 WEB-INF 目录中。该文件将定义您的重写规则。您可能希望对正则表达式有所了解。该文件应如下所示
^/home.seam?category=(.)&sub-category=(.)&sub-sub-category=(.*)$
/家/$1/$2/$3
<rule match-type="wildcard">
<from>/home\/$1\/$2\/$3</from>
<to type="redirect">/home.seam?category=$1&sub-category=$2&sub-sub-category=$3</to>
</rule>
Seam doco 在这里 - Seam documentation
Tucky UrlRewriteFilter 文档在这里 - Tuckey RewriteFilter doco