2012-02-27 25 views
5

Tôi có liên kết này trên trang web của tôi (page1):Cách tạo liên kết đưa bạn trở lại từ https đến http?

<a href="@{Controller.action1().secure()}">Link1</a> 

mà sẽ đưa tôi đến một trang (page2) qua https. Làm thế nào để tạo một liên kết trên trang 2 đưa tôi trở lại từ https đến http? Tôi nghĩ ký hiệu @@ sẽ thực hiện thủ thuật:

<a href="@@{Controller.action2()}">Link2</a> 

nhưng không, action2 cũng được gọi qua https.

+0

gì HTML được tạo của bạn trông như thế nào? Nếu các liên kết của bạn không bao gồm các giao thức, có thể bạn có thể thêm tiền tố 'http: //' bằng tay. –

+0

@XavierHolt cảm ơn, tôi đã thử điều này và nó hoạt động. Tôi đã có ấn tượng sai rằng '@@ {...}' luôn cung cấp đầy đủ đường dẫn 'http: //'. Nếu tôi sử dụng '@ {...}' (cho phép đường dẫn tương đối) thay vì '@@ {...}' tôi có thể tự đặt 'http: //'. Không thanh lịch, nhưng hoạt động. Câu trả lời của Alexander Ponomarenko, mặt khác, trông giống như một giải pháp mạnh mẽ. – stojke

Trả lời

3

Play không có một phương pháp đó sẽ là ngược lại để bảo đảm(), nhưng bạn có thể thực hiện nó cho mình với tùy chỉnh 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; 
     } 

phương pháp khuyến nông tùy chỉnh sẽ trở String, và tham số sẽ tổ chức đối tượng nâng cao, as the documentation suggests. Mã này gần giống với secure method's code.

Với phương pháp này, bây giờ bạn có thể sử dụng:

href="@{Controller.action2().unsecure()}" 
+0

Tuyệt vời! Làm việc như một say mê! Điều duy nhất còn lại để khắc phục bây giờ là làm cho các phương thức secure() và unsecure() không chỉ thay đổi giao thức, mà còn là cổng theo application.conf. Có một vé được nêu ra cho lỗi đó ([ticket] (https://play.lighthouseapp.com/projects/57987/tickets/362-using-secure-does-not-change-port-when-reverse-routing)) nhưng tôi không biết tại sao nó chưa được giải quyết. – stojke

Các vấn đề liên quan