2012-02-27 5 views
5

Ho questo link sulla mia pagina (page1):Come creare un collegamento che ti riporti da https a http?

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

che mi porta ad una pagina (pagina 2) su HTTPS. Come creare un link a pagina 2 che mi riporta da https a http? Ho pensato @@ notazione farebbe il trucco:

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

ma non, azione2 anche viene chiamato tramite https.

+0

cosa fa il tuo codice HTML generato assomiglia? Se i tuoi collegamenti non includono protocolli, potresti aggiungere il prefisso 'http: //' a mano. –

+0

@XavierHolt grazie, ho provato questo e funziona. Ho avuto l'impressione sbagliata che '@@ {...}' abbia sempre dato pieno 'http: //' percorso. Se uso '@ {...}' (che fornisce un percorso relativo) invece di '@@ {...}' Posso impostare manualmente 'http: //'. Non elegante, ma funziona. La risposta di Alexander Ponomarenko, d'altra parte, sembra una soluzione robusta. – stojke

risposta

3

Play non dispone di un metodo che sarebbe opposta a garantire(), ma è possibile implementare da soli con JavaExtension personalizzato:

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; 
     } 

metodi di estensione personalizzata dovrebbero tornare String, e il parametro terrà la oggetto avanzato, as the documentation suggests. Il codice è quasi identico allo secure method's code.

Con questo metodo è ora possibile utilizzare:

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

Ottimo! Funziona come un fascino! L'unica cosa che rimane da risolvere ora è fare in modo che i metodi secure() e unsecure() cambino non solo il protocollo, ma anche la porta secondo application.conf. C'è un ticket generato per quel bug ([ticket] (https://play.lighthouseapp.com/projects/57987/tickets/362-using-secure-does-not-change-port-when-reverse-routing)) ma non so perché non è stato ancora affrontato. – stojke