Sto usando JSF 2 e PrimeFaces 2.1 su GlassFish.
Dispongo di una pagina destinata a consentire alle persone di eseguire un’azione dopo aver seguito un URL di richiamata (ad esempio come collegamento incorporato nell’email o come parametro URL di richiamata di alcuni servizi di autenticazione o di pagamento esterni). Nel mio caso ho bisogno di resettare la password. L’URL di richiamata ha un parametro GET token
modo:
http://example.com/app/resetPasswordForm.jsf?token=abc123
Al caricamento della pagina di resetPasswordForm.jsf
, devo verificare se il token è valido e redirect alla schermata dell’app principale se non è valido.
Il mio pensiero è di avere un metodo di bean come:
public String resetPasswordHandler.showResetForm(String token) { if /* token is valid */ { return "resetPasswordForm.jsf"; } else { return "main.jsf"; } }
Ma come faccio a far sì che quel metodo venga colpito al caricamento della pagina?
Non sai come procedere: i suggerimenti sono ben accetti.
Usa
per triggersre un metodo bean prima del rendering della vista e restituisci semplicemente un risultato di navigazione (che sarà implicitamente trattato come un reindirizzamento).
Per esempio
con
@ManagedBean @RequestScoped public class Authenticator { private String token; public String check() { return isValid(token) ? null : "main.jsf"; } // Getter/setter. }
Se non si è ancora su JSF 2.2, è ansible utilizzare la soluzione
in combinazione con ExternalContext#redirect()
.
con
@ManagedBean @RequestScoped public class Authenticator { private String token; public void check() throws IOException { if (!isValid(token)) { FacesContext.getCurrentInstance().getExternalContext().redirect("main.jsf"); } } // Getter/setter. }