我讀過JSF文檔ResponseStateManager
有一個isPostBack()
方法。如何(以及在哪裏)可以獲得ResponseStateManager
的實例?如何知道我是否在回傳?
回答
如何知道我是否在回發?
取決於JSF版本。
在JSF 1.0/1.1中,沒有ResponseStateManager#isPostback()
方法可用。檢查javax.faces.ViewState
參數是否存在於請求參數映射中,如所示。
public static boolean isPostback() {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
return externalContext.getRequestParameterMap().contains("javax.faces.ViewState");
}
在JSF 1.2,確實使用ResponseStateManager#isPostback()
這反過來實際檢查javax.faces.ViewState
參數在要求參數映射圖的存在。
public static boolean isPostback() {
FacesContext context = FacesContext.getCurrentInstance();
return context.getRenderKit().getResponseStateManager().isPostback(context);
}
在JSF 2.0,而使用FacesContext#isPostback()
,這下蓋實際上代表們ResponseStateManager#isPostback()
。
public static boolean isPostback() {
return FacesContext.getCurrentInstance().isPostback();
}
我們可以在jsf頁面上檢查isPostback在java代碼中)? – 2012-06-12 06:45:44
的確,在jsf1.2之前,isPostBack是通過requestScope of the current instance of FaceContext獲得的。
由於JSF1.2所述的ResponseStateManager(輔助類來StateManager一個知道特定呈現技術被用來產生響應,一個單抽象類,通過的RenderKit販賣。)
在恢復查看階段的生命週期,ViewHandler retrieves the ResponseStateManager object爲了測試請求是回發還是初始請求。
如果請求是回發,則調用ViewHandler的therestoreView方法。此方法使用theResponseStateManager對象重新構建組件樹並恢復狀態。在構建樹並且恢復狀態之後,直到呈現響應階段再次出現時,不需要ViewHandler實例。
該條上述(Creating and Using a Custom Render Kit)mentionned說明了如何實現/得到一個ResponseStateManager,通過的RenderKit(通過實施使該組件的標記的標記處理程序定義)。
可能這對於您在您的上下文中獲取自己的ResponseStateManager足夠了嗎?
謝謝你的完整性(我投票給你)。我需要一個更實用的提示,那就是我可以得到我的實現正在使用的ResponseStateManager的一個實例:我後來發現,我可以從FacesContext訪問RenderKit並使用getResponseStateManager() – 2009-01-09 09:25:59
對於JSF1.2
public static boolean isPostback(){
FacesContext context = FacesContext.getCurrentInstance();
return context != null && context.getExternalContext().getRequestParameterMap().containsKey(ResponseStateManager.VIEW_STATE_PARAM);
}
- 1. 我如何知道推送通知是否在iOS中傳遞?
- 2. 如何知道圖片是否已上傳? - 回形針
- 3. 我如何知道我是否在道路兩點之間android
- 4. 我如何知道Rabbitmq是否成功?
- 5. 我如何知道IIS是否工作?
- 6. 我如何知道DnD是否成功
- 7. 我如何知道是否require_once?
- 8. 如何知道我的Android設備上是否有傳感器?
- 9. 如何知道是否
- 10. 我如何知道回調是否觸發了服務器?
- 11. 如何知道服務器是否在線,如果我們只知道IP?
- 12. 如何知道用戶是否在線?
- 13. 如何知道文件是否存在?
- 14. 如何知道是否正在對angular2
- 15. 如何知道是否存在NSUserDefault?
- 16. 我如何知道我是否在網絡環境中運行?
- 17. 我如何知道我是否在使用gitignore或gitignore_global?
- 18. 我如何知道我的標記是否在街上
- 19. 與MessageEnumerator RemoveCurrent我如何知道我是否在排隊結束?
- 20. 我如何知道我是否在使用Rackspace Developer + plus帳戶?
- 21. 我如何知道變量是否是emty或不在硒IDE
- 22. 如何知道我是在查看換行還是回車等?
- 23. 如何知道NSURLSessionConfiguration是否是backgroundSessionConfiguration?
- 24. 如何知道指針是否是NSObject?
- 25. 如何知道NSWindow是否是前窗?
- 26. 如何知道表是否是數組?
- 27. 系統如何知道我們是否正在上傳csv fie或xls文件?
- 28. 我如何知道用戶是否允許推送通知
- 29. 我如何知道CPU是否是Haswell或不是
- 30. 通知中心 - 如何知道是否存在「未讀」通知?
我從你的評論中看到你已經找到了一個切實可行的解決方案,那很好。你可以在這裏發佈它作爲答案,我會把它投票;) – VonC 2009-01-09 11:28:23