我在JSF中有一個Web應用程序。我需要爲它添加AJAX功能。我怎樣才能做到這一點?如何在我的JSF Web應用程序中使用AJAX功能?
回答
我知道這是一個老帖子,但我認爲這可能對仍然在JSF 1.1中掙扎的人有所幫助。我發現了一種使用JSF 1.1獲得AJAX功能的方法 - 僅使用jQuery和Servlet的MyFaces 。你需要這些元素:
- 一個JSF頁面,只是作爲一個容器。用DIV放置你的內容並通過AJAX刷新它們。在這個DIV內部,爲了第一次加載,你爲第二個JSF頁面添加了一個包含子視圖的子視圖。
- 第二個JSF頁面。只是一個標準的JSF頁面,帶有一個Session範圍的Managed Bean,但是打算通過AJAX重新加載。這個頁面是您在每次請求時都會從Servlet轉發的地方。提前解釋。
- 處理AJAX請求並重新加載第二個JSF頁面的Servlet。關鍵是要得到管理bean處理來自FacesContext中類第二JSF,這樣你就可以操縱它,改變它的性質......爲了做到這一點:
//這正好servlet代碼的FacesContextFactory內contextFactory = (FacesContextFactory)FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY); LifecycleFactory lifecycleFactory = (LifecycleFactory)FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);生命週期生命週期= lifecycleFactory.getLifecycle(LifecycleFactory。DEFAULT_LIFECYCLE);
FacesContext facesContext = contextFactory.getFacesContext(request.getSession()。getServletContext(), request,response,lifecycle);
InnerFacesContext.setFacesContextAsCurrentInstance(facesContext);
UIViewRoot view = facesContext.getApplication()。getViewHandler()。createView(facesContext, 「」); facesContext.setViewRoot(視圖);
//現在您可以訪問的背景下,你可以得到託管bean VB的ValueBinding = facesContext.getApplication()createValueBinding( 「#{} YourManagedBean」)。 YourManagedBeanClass yourBean =(YourManagedBeanClass) vb.getValue(facesContext);您可以操縱託管bean屬性,最終將 轉發到JSF頁面// ... yourBean.setParameter(request.getParameter(「myParam」)); RequestDispatcher dispatcher = getServletContext()。getRequestDispatcher(「/ path/to/your_second_jsf.xhtml」); dispatcher.forward(request,response);
第一個JSF頁面是您應該爲AJAX請求提供javascript功能的地方。您可以從第二個JSF調用這些JavaScript函數。當AJAX請求執行回調時,您只需將HTML響應放入容器DIV中。 I.E:
//param: json structure of parameters
function reloadAjaxPanel(param) {
$.get("/ajaxController", param, function(data) {
$("#container").html(data);
});
}
希望它有幫助!
我假設你使用JSF 1.x中,因爲JSF 2.x已經附帶了buitin Ajax功能,那麼這個問題就非常有說服力。如果升級到JSF 2.x確實不是一種選擇,那麼您將不得不尋找具有內置Ajax功能的第三方JSF 1.x組件庫,例如RichFaces 3.x(不是4.x,因爲它需要JSF 2.x )或PrimeFaces 1.x(不是2.x或更新版本,因爲它需要JSF 2.x)。
RichFaces 3.x附帶了Ajax4jsf標籤庫(<a4j:xxx>
),它支持基本的ajax功能,從<a4j:support>
標籤開始。該標籤與JSF 2.x <f:ajax>
標籤非常相似。
它是不會輕易可以引入「只是」一個JS庫例如Dojo,jQuery的,等等,因爲你需要改變在服務器端的JSF組件樹狀態以及每當您在HTML的變化客戶端的DOM樹。這些簡單的JS庫沒有考慮到這一點。你將不得不在自定義視圖處理程序中編寫大量額外的服務器端代碼。但這正是Ajax4jsf已經在做的,所以你想用它來代替重新發明輪子。
如果你真的打算自行增長; chapter 11 of the book JSF: The Complete Reference可以很好地介紹您需要考慮的所有事情。你會發現它並不是那麼簡單。
- 1. 如何在我的Web應用程序中使用Liferay功能
- 2. 我如何在我的web應用程序中包含Ajax
- 3. 如何在Web應用程序中啓用Eclipse調試功能?
- 4. 如何使用Web應用程序的新Firebase Analytics功能?
- 5. 如何在Spring + JSF應用程序中使用JSF註釋
- 6. 如何在Java Web應用程序中使用jQuery學習AJAX
- 7. 如何在MVC Web應用程序中路由功能
- 8. 如何在Spring Web應用程序中實現共享功能?
- 9. 最新的Web應用程序功能
- 10. 我如何在我的grails應用程序中使用formRemote功能
- 11. 如何配置我的Web應用程序和功能應用程序使用哪個存儲帳戶?
- 12. 如何使用jsf高效開發web應用程序
- 13. 如何在我的javamail web應用程序中使用@MailSessionAnnotation?
- 14. 如何在我的web應用程序中使用QTP
- 15. 如何在使用JSF和EJB的Java Web應用程序中實現@NamedQuery
- 16. 如何在我們的應用程序中添加airplay功能?
- 17. 在JSF應用程序中使用Web Flow 2
- 18. 如何使用其他應用程序中的功能創建應用程序
- 19. 何時不要在Web應用程序開發中使用AJAX?
- 20. 在AJAX應用程序中保持Web應用程序狀態
- 21. 如何在Windows Phone應用程序中使用GetPixel功能?
- 22. 如何在iOS應用程序中使用「打開...」功能?
- 23. 如何使用在Web應用程序
- 24. 2005 Web服務,我不能在3.5應用程序中使用
- 25. JSF 2.1 web應用程序的Spring Security
- 26. 如何在JSF中顯示我的應用程序的錯誤?
- 27. 我如何在Android應用程序中使用web cookie
- 28. 如何在我正在使用的Web應用程序中加載所有Web應用程序?
- 29. 要使用sudo功能,我應該在我的應用程序中寫什麼?
- 30. 如何使alasql在我的asp.net web應用程序中工作?
你試圖完成什麼具體? – Brad 2011-06-07 14:07:34