2010-03-30 53 views

回答

12

如果你已經在JSF 2.0,那麼你可以使用FacesContext#getCurrentPhaseId()檢查:

if (FacesContext.getCurrentInstance().getCurrentPhaseId() == PhaseId.RESTORE_VIEW) { 
    // Restore view called. 
} 

但是如果你仍然對JSF 1.x中還沒有,那麼你最好的度假村使用PhaseListener這在PhaseId.RESTORE_VIEW上偵聽,在beforePhase()期間在請求範圍中設置標誌/切換/標記,並在afterPhase()期間刪除它。讓bean的getter方法在請求範圍內檢查它的存在。

這就是說,你到底需要什麼?我從來沒有需要這樣的功能需求。不是這個bean的構造函數或一個@PostConstruct註釋的方法可能是一個更好的地方做這種初始化的東西嗎?

+0

我只在JSF 1.x上。我想這樣做的原因是,在恢復視圖階段,在我的託管bean上調用了一個方法,我不需要調用它,而且它特別昂貴。所以我想把邏輯寫成:「如果在恢復視圖中,不要做任何事情」。 – BestPractices 2010-03-30 17:07:30

+0

你有沒有考慮過其他方法?檢查你是否在'RENDER_RESPONSE'。通過這種方式,您可以使用'if(FacesContext.getCurrentInstance()。getRenderResponse()){}'而不是從JSF 1.0開始已經可用的。但是,如果bean本身是請求作用域,那麼我只是把它放在bean的構造函數中。除非這個bean有太多的責任,但這是另一個問題;) – BalusC 2010-03-30 17:10:32

+0

好的 - 我想檢查getRenderResponse,但無法確定是否會確實地告訴您您是否處於RestoreView階段。我會試試看...... – BestPractices 2010-03-30 17:14:04

相關問題