由于使用<rewrite/>
PrettyFaces 中的标签会造成大量混乱,我们已经迁移到 PrettyFaces 的新核心架构(//Rewrite 2.0.0.Final),它可以更好地控制应用程序配置。(可在此处获得 http://ocpsoft.org/prettyfaces/)
如果您的环境允许,我建议您尝试 PrettyFaces 4。如果您愿意,可以将 URL 映射保留在 pretty-config.xml 文件中,但您现在可以在 Rewrite 中更安全地定义更多自定义 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>
现在还创建一个 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("^.*[^/]$");
}
}
不要忘记注册/激活 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()
子句中的正则表达式,但它应该是这样的。我希望这有帮助!