2011-10-05 30 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没有那么多,但以防万一...)