我有(第1页)我的网页上点击此链接:如何建立一个链接,将您从https转回http?
<a href="@{Controller.action1().secure()}">Link1</a>
说带我到一个页面(第2页)通过https。如何在页面2上建立一个链接,使我从https返回http?我认为@@ notation会做的伎俩:
<a href="@@{Controller.action2()}">Link2</a>
但它不,action2也通过https调用。
我有(第1页)我的网页上点击此链接:如何建立一个链接,将您从https转回http?
<a href="@{Controller.action1().secure()}">Link1</a>
说带我到一个页面(第2页)通过https。如何在页面2上建立一个链接,使我从https返回http?我认为@@ notation会做的伎俩:
<a href="@@{Controller.action2()}">Link2</a>
但它不,action2也通过https调用。
播放没有这将是相反的,以确保()的方法,但你可以自己定制JavaExtension实现它:
import play.templates.JavaExtensions;
import play.mvc.Router.ActionDefinition;
public class MyExtensions extends play.templates.JavaExtensions {
public static String unsecure(ActionDefinition action) {
if (!action.url.contains("http://") && !action.url.contains("https://")) {
action.absolute();
}
action.url = action.url.replace("https:", "http:");
return action.url;
}
自定义扩展方法应该返回String
,参数将举行增强对象,as the documentation suggests。该代码几乎与secure method's code相同。
使用这种方法,你现在可以使用:
href="@{Controller.action2().unsecure()}"
太棒了!奇迹般有效!现在唯一需要解决的问题是使secure()和unsecure()方法不仅改变协议,还改变根据application.conf的端口。有一张针对该错误提出的票([ticket](https://play.lighthouseapp.com/projects/57987/tickets/362-using-secure-does-not-change-port-when-reverse-routing))但我不知道为什么还没有解决。 – stojke 2012-02-27 18:18:00
什么是您生成的HTML是什么样子?如果您的链接不包含协议,也许您可以手动添加前缀“http://”。 – 2012-02-27 01:57:48
@ XavierHolt谢谢,我试过这个,它的工作原理。我错误地认为'@@ {...}'总是给出完整的'http://'路径。如果我使用'@ {...}'(提供相对路径)而不是'@@ {...}'我可以手动设置'http://'。不优雅,但工程。另一方面,亚历山大波诺马连科的答案看起来像一个可靠的解决方案。 – stojke 2012-02-27 16:49:17