2012-02-27 8 views
5

que tienen este enlace en mi página (Página 1):¿Cómo hacer un enlace que lo lleve de https a http?

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

que me lleva a una página (página 2) a través de HTTPS. ¿Cómo hacer un enlace en la página 2 que me lleve de https a http? Pensé @@ notación haría el truco:

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

pero no, acción2 también se llama a través de https.

+0

¿Cómo se ve el código HTML generado como? Si sus enlaces no incluyen protocolos, tal vez podría agregar el prefijo 'http: //' a mano. –

+0

@XavierHolt gracias, probé esto y funciona. Tenía la impresión errónea de que '@@ {...}' siempre daba una ruta 'http: //' completa. Si uso '@ {...}' (que proporciona una ruta relativa) en lugar de '@@ {...}', puedo configurar manualmente 'http: //'. No es elegante, pero funciona. La respuesta de Alexander Ponomarenko, por otro lado, parece una solución robusta. – stojke

Respuesta

3

juego no tiene un método que sería contrario a asegurar(), pero se puede aplicar por sí mismo con la costumbre 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; 
     } 

métodos de extensión personalizado deberían volver String, y el parámetro llevará a cabo la objeto mejorado, as the documentation suggests. El código es casi idéntico al secure method's code.

Con este método, ahora puede usar:

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

¡Genial! ¡Funciona de maravilla! Lo único que queda por arreglar ahora es hacer que los métodos secure() y unsecure() cambien no solo el protocolo, sino también el puerto de acuerdo con application.conf. Hay un ticket levantado para ese error ([ticket] (https://play.lighthouseapp.com/projects/57987/tickets/362-using-secure-does-not-change-port-when-reverse-routing)) pero no sé por qué no se ha abordado aún. – stojke