2010-07-20 13 views
9

Come si crea un collegamento che è possibile inviare via e-mail agli utenti per confermare che il proprio indirizzo e-mail sia stato fatto clic in JSF? cioè, una volta cliccato sul link, il loro account verrà attivato.Link di conferma Email in JSF

risposta

17

Supponendo che è già in corso JSF 2.0, si potrebbe afferrare @ManagedProperty e @PostConstruct .

@ManagedBean 
@RequestScoped 
public class Activation { 

    @ManagedProperty(value="#{param.key}") 
    private String key; 
    private boolean valid; 

    @PostConstruct 
    public void init() { 
     valid = check(key); // And auto-login if valid? 
    } 

    // ... 
} 

e poi in JSF cui si accede da http://example.com/activate.jsf?key=somelonggeneratedkey

<h:panelGroup layout="block" rendered="#{activation.valid}"> 
    <p>Your account is successfully activated!</p> 
    <p><h:link outcome="home">Go to home page</h:link></p> 
</h:panelGroup> 
<h:panelGroup layout="block" rendered="#{!activation.valid}"> 
    <p>Activation failed! Please enter your email address to try once again.</p> 
    <h:form> 
     ... 
    </h:form> 
</h:panelGroup> 
+0

Questo è proprio quello che mi serve. Grazie +1 –

+0

Domanda veloce. Il codice deve essere lungo e unico. Java ha un modo per generare una lunga sequenza unica come quella di BalusC? Non penso che il generatore di numeri casuali Java garantisca l'unicità –

+3

@Harry: Usa ['java.util.UUID'] (http://download.oracle.com/javase/6/docs/api/java/util/UUID.html) : 'String uuid = UUID.randomUUID(). ToString();'. – BalusC

6

è possibile implementare con la creazione di una pagina (.jsp es) che ha:

<f:view beforePhaseListener="#{userActivationController.performActivation}"> 

(questo è per facelets, per jsp l'attributo è solo beforePhase). E poi, nel metodo del bean gestito utilizzare FacesContext.getCurrentContext().getExternalContext().getParameterMap() per ottenere i patameters richiesta e ottenere il codice di attivazione, che viene passato come:

http://yoursite.com/activate.jsp?code=54gfd54tgdgfd

Problemi correlati