我得到了一個建議,將所有數據查找放在給定頁面的beforePhase中,但是,現在我正在做一些更深入的分析,看起來在beforePhase之前調用了一些getter方法被解僱。JSF getter方法在調用beforeBhase之前觸發
當我添加對url參數的支持,並且在beforePhase調用中初始化的對象上獲取NPE時,它變得非常明顯。
有什麼想法?我設置了錯誤的東西。
我有這個在我的JSP頁面:
<f:view beforePhase="#{someController.beforePhaseSummary}">
也就是說只有在JSP文件中的5日線和標籤庫之後是。
下面是在beforePhaseSummary方法的代碼:
public void beforePhaseSummary(PhaseEvent event) {
logger.debug("Fired Before Phase Summary: " + event.getPhaseId());
if (event.getPhaseId() == PhaseId.RENDER_RESPONSE) {
HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
if (request.getParameter("application_id") != null) {
loadApplication(Long.parseLong(request.getParameter("application_id")));
}
/* Do data fetches here */
}
}
測井以上輸出表示事件被觸發。 servlet請求用於捕獲url參數。數據提取收集數據。然而,記錄輸出低於:
2010-04-23 13:44:46,968 [http-8080-4] DEBUG ...SomeController 61 - Get Permit
2010-04-23 13:44:46,968 [http-8080-4] DEBUG ...SomeController 107 - Getting UnsubmittedCount
2010-04-23 13:44:46,984 [http-8080-4] DEBUG ...SomeController 61 - Get Permit
2010-04-23 13:44:47,031 [http-8080-4] DEBUG ...SomeController 133 - Fired Before Phase Summary: RENDER_RESPONSE(6)
的日誌指示2個呼叫到getPermit方法,一個用於該getUnsubmittedCount beforePhase燒製之前。
什麼是功能要求?爲什麼是前期而不是構造函數或postconstruct?你在說什麼吸氣劑?他們爲什麼被調用?你對[JSF生命週期](http://balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html)有一個公正的理解嗎? – BalusC 2010-04-22 16:41:32
它是會員在整個會話期間使用,存儲諸如標題信息之類的東西,也用於麪包屑導航。這是會話範圍。因此,如果我把它放在postContruct中,那麼當主題改變時它不會重新初始化。有一次,我請求了範圍,並且在每個頁面上不斷地初始化它,因爲您在低於信息正常初始化級別的應用級別進行導航。 – 2010-04-22 18:59:09
我希望看到beforePhaseSummary方法的代碼。 – Naganalf 2010-04-22 23:27:39