2010-07-20 34 views
9

如何製作一個鏈接,您可以通過電子郵件發送給用戶以確認他們的電子郵件地址在JSF中單擊了?即一旦他們點擊鏈接,他們的賬戶將被激活。確認鏈接JSF中的電子郵件

回答

17

假設你已經在JSF 2.0,你可以抓住@ManagedProperty@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? 
    } 

    // ... 
} 

,然後在JSF是由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

訪問這正是我需要的。謝謝+1 – 2010-12-06 17:09:43

+0

快速的問題。代碼需要很長且獨一無二。 java有沒有辦法像BalusC那樣產生一個很長的獨特序列?我不認爲Java隨機數生成器保證唯一性 – 2010-12-06 17:17:47

+3

@Harry:使用['java.util.UUID'](http://download.oracle.com/javase/6/docs/api/java/util/UUID.html) :'String uuid = UUID.randomUUID()。toString();'。 – BalusC 2010-12-06 17:27:00

6

您可以通過創建一個頁面(.JSP爲前),有實現它:

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

(這是小面;對於JSP屬性只是beforePhase)。然後,在管理bean的方法使用FacesContext.getCurrentContext().getExternalContext().getParameterMap()獲取請求patameters並獲得激活碼,這是通過這樣的:

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