2017-03-08 52 views
0

我有一个在PrettyFaces 3.3.3和Wildfly 10.1.0.Final上运行的webapp。为了使URL更加用户友好,我使用了PrettyFaces。有效的URL的一个例子是类似于:漂亮的URL使用PrettyFaces隐藏资源

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 

PrettyFaces错误地解释这一点,阻止我访问真正的资源:

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

我试图找到一种方式来告诉PrettyFaces不转换为CSS文件的URL,但我没能找到任何像那样。

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

我现在PrettyFaces配置为:

回答

2

PrettyFaces将对阵正则表达式的任何传入的请求。

这样的模式:

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

将被转换成一个正则表达式是这样的:

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

这是因为在默认情况下PrettyFaces使用[^/]+所有路径参数。

这样的一般模式也会导致其他资源如CSS或图像文件匹配。

解决此问题的一种方法是自定义PrettyFaces将用于路径参数的正则表达式模式。这是很容易做到,并说明如下:

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}/[^/]+ 

在这种情况下,你的风格工作表将不再符合该模式。