2017-03-08 50 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}/[^/]+ 

在這種情況下,你的風格工作表將不再符合該模式。