2011-10-05 33 views
2

在我的Play應用中,當我使用反向路由來生成鏈接時,參數中的正斜槓正在逃脫,我寧願他們不是。防止在反向路線中跳過斜線

例如:

<a href="@{Application.page('about/contact')}">Contact Us</a> 

產生一個工作環節,但需要你/about%2Fcontact.html而非/about/contact.html。 (在地址欄輸入/about/contact.html也進入到正確的地方。)

我這樣做是因爲我只得到了做什麼有趣的事,其餘的基本上都是靜態的幾頁 - 他們只使用基本模板特徵(extendsinclude,getset)。由於爲每個控制器創建單獨的控制器和操作都是過度的,我已經設置了一個單獨的操作來處理所有這些操作。

public class Application extends Controller { 
    public static void page(String path) { 
     render("/static/" + path + ".html"); 
    } 
} 

一個途徑處理:

GET  /{<.+>path}.html    Application.page 

任何想法,我可以改變周圍的事物,這樣的斜線不被編碼?

+0

我不知道理解,但你爲什麼不只是把鏈接到靜態頁面中XXX? – mandubian

+0

我曾嘗試查看RouteArgs如何配置的源代碼,但我沒有看到任何可覆蓋的方式,除非您更改Play的來源並將其更改爲所有反向路由。 – Codemwnci

回答

1

因爲我們(顯然)不能覆蓋的方式RouteArgs作品中,我們給定的URL中的方法進行解碼,這樣的:

public class Application extends Controller { 
    public static void page(String path) { 
     render("/static/" + URLDecoder.decode(path, "UTF-8"); + ".html"); 
    } 
} 

但要注意的安全隱患! (當然,.HTML沒有那麼多,但以防萬一...)