漂亮的URL使用漂亮的范围隐藏了资源



我有一个在Prettyfaces 3.3.3和Wildfly 10.1.0. -final上运行的WebApp。为了使URL更加用户友好,我使用了Prettestfaces。有效URL的一个示例类似于:

http://www.example.com/en/drinks

在这种情况下,bean内将有两个变量:

private String language;
private String zone;

具有值:

language = "en"
zone = "drinks"

问题是我还拥有一个带有路径的CSS文件:

http://www.example.com/styles/style.css

petwortfaces错误地解释了这一点,使我无法访问真实资源:

language = "styles"
zone = "style.css"

我试图找到一种方法来告诉petwortfaces不要翻译CSS文件的URL,但我找不到类似的东西。

有没有办法通过保持漂亮的URL来访问CSS文件?

我当前的petchfaces配置是:

<url-mapping id="zoneSelected"> 
    <pattern value="/#{navigationController.language}/#{navigationController.zone}" /> 
    <view-id>/faces/index.xhtml</view-id>
</url-mapping>

prettyfaces将与正则表达式的任何传入请求匹配。

这样的模式:

<pattern value="/#{bean.language}/#{bean.zone}" />

将转换为这样的正则表达式:

/[^/]+/[^/]+

那是因为默认情况下,PetteryFaces将[^/]+用于所有路径参数。

这样的一般模式的原因也匹配其他资源,例如CSS或图像文件。

解决此问题的一种方法是自定义PetcherFaces将用于路径参数的正则表达模式。这很容易完成和描述:

http://www.ocpsoft.org/docs/prettyfaces/3.3.3/en-us/html/configuration.html#config.pathparams.regex

基本上只是使用此模式:

<pattern value="/#{ /[a-z]{2}/ bean.language }/#{bean.zone}" />

这将转化为:

/[a-z]{2}/[^/]+

在这种情况下,您的样式表将不再匹配模式。

最新更新