我在JSF中有一个Web应用程序。我需要为它添加AJAX功能。我怎么能这样做?
答案 0 :(得分:3)
我假设您正在使用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 :(得分:2)
答案 2 :(得分:1)
我知道这是一个老帖子,但我认为这对任何仍在努力使用JSF 1.1的人都有帮助。我找到了一种使用JSF 1.1获取AJAX功能的方法 - MyFaces 只使用jQuery和Servlet 。你需要这些元素:
//这里面是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()方法, 请求,响应,生命周期);
InnerFacesContext.setFacesContextAsCurrentInstance(FacesContext的);
UIViewRoot view = facesContext.getApplication()。getViewHandler()。CreateView的(FacesContext中, “”); facesContext.setViewRoot(视图);
//现在您可以访问上下文,您可以获取托管bean ValueBinding vb = facesContext.getApplication()createValueBinding( “#{YourManagedBean}”)。 YourManagedBeanClass yourBean =(YourManagedBeanClass) vb.getValue(FacesContext的);
//现在您可以最终操作托管bean属性 转发到JSF页面// ... yourBean.setParameter(用request.getParameter( “myParam”)); RequestDispatcher dispatcher = 。getServletContext()方法的getRequestDispatcher( “/路径/到/ your_second_jsf.xhtml”); dispatcher.forward(请求,响应);
第一个JSF页面是你应该为AJAX请求添加javascript功能的地方。你从第二个JSF调用这些javascript函数。当AJAX请求执行回调时,您只需将HTML响应放在容器DIV中。即:
//param: json structure of parameters
function reloadAjaxPanel(param) {
$.get("/ajaxController", param, function(data) {
$("#container").html(data);
});
}
希望它有所帮助!