2010-04-22 26 views
0

我得到了一個建議,將所有數據查找放在給定頁面的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燒製之前。

+1

什麼是功能要求?爲什麼是前期而不是構造函數或postconstruct?你在說什麼吸氣劑?他們爲什麼被調用?你對[JSF生命週期](http://balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html)有一個公正的理解嗎? – BalusC 2010-04-22 16:41:32

+0

它是會員在整個會話期間使用,存儲諸如標題信息之類的東西,也用於麪包屑導航。這是會話範圍。因此,如果我把它放在postContruct中,那麼當主題改變時它不會重新初始化。有一次,我請求了範圍,並且在每個頁面上不斷地初始化它,因爲您在低於信息正常初始化級別的應用級別進行導航。 – 2010-04-22 18:59:09

+0

我希望看到beforePhaseSummary方法的代碼。 – Naganalf 2010-04-22 23:27:39

回答

0

想通了。如果你的JSTL混入你的頁面,那麼這些方法可能會在JSF方法被調用之前觸發。我有像這樣的方法:

<c:if test="${someController.logic == true}"> 
    <p>Some Text</p> 
</c:if> 

someController.logic調用在someController.beforePhase調用之前觸發。

我更換了以上

<h:outputText rendered="#{someController.logic == true}"> 
    <p>Some Text</p> 
</h:outputText> 

現在事情火在正確的順序。我還在我的應用程序中發現了其他頁面,這些頁面在將JSTL與JSF混合使用時有奇怪的結果。所以我現在正在從應用程序中刪除JSTL。

+0

相關:[JSF2 Facelets中的JSTL是否合理?](http://stackoverflow.com/q/3342984/1065197)。下次更好地解釋你的問題出現在哪裏。 – 2014-05-28 05:39:32

相關問題