我有(第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