public void beforePhase(PhaseEvent event)
public void afterPhase(PhaseEvent event)
被稱爲與
<p:commandButton value="Login" action="#{checkUser.login}" ajax="false" />
當我想實現註銷功能目前相關的方法後,按鈕必須按兩次以離開頁面。
有沒有什麼辦法讓「命令按鈕」的方法被稱爲前「階段聽衆」的方法上面提到的?
public void beforePhase(PhaseEvent event)
public void afterPhase(PhaseEvent event)
被稱爲與
<p:commandButton value="Login" action="#{checkUser.login}" ajax="false" />
當我想實現註銷功能目前相關的方法後,按鈕必須按兩次以離開頁面。
有沒有什麼辦法讓「命令按鈕」的方法被稱爲前「階段聽衆」的方法上面提到的?
您需要發送登錄和註銷後重定向,以便讓客戶端觸發新的HTTP請求。
E.g.
public String login() {
// ...
return "home?faces-redirect=true";
}
public String logout() {
// ...
return "login?faces-redirect=true";
}
順便說一句,一個PhaseListener
不執行基於請求驗證的工具。你應該更喜歡這個工作的servlet Filter
。該PhaseListener
有它僅在JSF請求和它的調用高達12次在每個請求的基礎上運行的主要缺點。對於這樣的過濾器的一個例子開球,也參見How to provide bean methods without EL expression
編輯:我要指出的是,BalusC的答案也許應該是解決這一問題的首選方式。但是如果你仍然想玩相位順序,請繼續閱讀。 /最終編輯
其實可以的PhaseListeners前兩者,如果你實現它來聽每一個階段的動作屬性指定的,你的方法後調用。
public class MyPhaseListener implements PhaseListener {
public PhaseId getPhaseId() { return PhaseId.ANY_PHASE; }
public void beforePhase(PhaseEvent event) {
System.out.println("Before Phase: " + event.getPhaseId());
}
public void afterPhase(PhaseEvent event) {
System.out.println("After Phase: " + event.getPhaseId());
}
}
啓動監聽器faces-config.xml中
<faces-config ... >
<lifecycle>
<phase-listener>MyPhaseListener</phase-listener>
</lifecycle>
</faces-config>
這裏是所有監聽invokations的打印輸出和當的ActionListener和行動被調用:
INFO: Before Phase: RESTORE_VIEW 1
INFO: After Phase: RESTORE_VIEW 1
INFO: Before Phase: APPLY_REQUEST_VALUES 2
INFO: After Phase: APPLY_REQUEST_VALUES 2
INFO: Before Phase: PROCESS_VALIDATIONS 3
INFO: After Phase: PROCESS_VALIDATIONS 3
INFO: Before Phase: UPDATE_MODEL_VALUES 4
INFO: After Phase: UPDATE_MODEL_VALUES 4
INFO: Before Phase: INVOKE_APPLICATION 5
INFO: ActionListener Done
INFO: Action Done
INFO: After Phase: INVOKE_APPLICATION 5
INFO: Before Phase: RENDER_RESPONSE 6
INFO: After Phase: RENDER_RESPONSE 6