4
當我託管的bean中的特定方法被調用時,我想知道我是否處於JSF生命週期的還原視圖階段。我怎樣才能做到這一點?JSF:如何檢查我是否處於「恢復視圖」階段?
當我託管的bean中的特定方法被調用時,我想知道我是否處於JSF生命週期的還原視圖階段。我怎樣才能做到這一點?JSF:如何檢查我是否處於「恢復視圖」階段?
如果你已經在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
註釋的方法可能是一個更好的地方做這種初始化的東西嗎?
我只在JSF 1.x上。我想這樣做的原因是,在恢復視圖階段,在我的託管bean上調用了一個方法,我不需要調用它,而且它特別昂貴。所以我想把邏輯寫成:「如果在恢復視圖中,不要做任何事情」。 – BestPractices 2010-03-30 17:07:30
你有沒有考慮過其他方法?檢查你是否在'RENDER_RESPONSE'。通過這種方式,您可以使用'if(FacesContext.getCurrentInstance()。getRenderResponse()){}'而不是從JSF 1.0開始已經可用的。但是,如果bean本身是請求作用域,那麼我只是把它放在bean的構造函數中。除非這個bean有太多的責任,但這是另一個問題;) – BalusC 2010-03-30 17:10:32
好的 - 我想檢查getRenderResponse,但無法確定是否會確實地告訴您您是否處於RestoreView階段。我會試試看...... – BestPractices 2010-03-30 17:14:04