由于在 PrettyFaces 中使用 <rewrite/> 标记会造成大量混乱,我们已迁移到 PrettyFaces 的新核心架构(//Rewrite 2.0.0.Final),它可以更好地控制应用程序配置. (可在此处获取http://ocpsoft.org/prettyfaces/)
如果您的环境允许,我建议您尝试 PrettyFaces 4。如果您愿意,您可以将 URL 映射保留在 pretty-config.xml 文件中,但您现在可以更安全地在 Rewrite ConfigurationProvider 中定义更多自定义的重写规则:
<!-- for JSF 2.x -->
<dependency>
<groupId>org.ocpsoft.rewrite</groupId>
<artifactId>rewrite-servlet</artifactId>
<version>2.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.ocpsoft.rewrite</groupId>
<artifactId>rewrite-config-prettyfaces</artifactId>
<version>2.0.0.Final</version>
</dependency>
保留您的 pretty-config.xml 原样:
<url-mapping id="browsecategory">
<pattern value="/browse/" />
<view-id value="/browser.xhtml" />
</url-mapping>
现在还 create a ConfigurationProvider 来处理你的斜杠:
public class RewriteConfig extends HttpConfigurationProvider
{
@Override
public int priority()
{
return 10;
}
@Override
public Configuration getConfiguration(final ServletContext context)
{
return ConfigurationBuilder.begin()
.addRule()
.when(Direction.isInbound().and(Path.matches("/{p}")))
.perform(Redirect.to(context.getContextRoot() + "/{p}/"))
.where("p").matches("^.*[^/]$");
}
}
别忘了register/activate the ConfigurationProvider。
此外,您也可以在此配置文件中进行 URL 映射,从而无需 pretty-config.xml 或 PrettyFaces 4 con:
public class RewriteConfig extends HttpConfigurationProvider
{
@Override
public int priority()
{
return 10;
}
@Override
public Configuration getConfiguration(final ServletContext context)
{
return ConfigurationBuilder.begin()
.addRule(Join.path("/browse/").to("/browser.xhtml"))
.addRule()
.when(Direction.isInbound().and(Path.matches("/{p}")))
.perform(Redirect.to(context.getContextRoot() + "/{p}/"))
.where("p").matches("^.*[^/]$");
}
}
我没有测试matches() 子句中的正则表达式,但应该是这样的。我希望这会有所帮助!