我使用过 JSF 1.2 但对 JSF 2.0 是新的。似乎 JSF 2.0 通过无缝支持 ajax 功能,<f:ajax>
但我还不清楚如何?我想了解是什么让这两种强大的技术如此完美地协同工作?两个生命周期如何交互?
PS:我熟悉ajax和javascript。所以你可以在这个前提下做出你的答案。
这个问题非常广泛,我建议搜索适当的标签以了解其在实际情况中的用法。BalusC 在 stackoverflow 上做出了很多贡献,并且还编写了 Xtreme Biker 参考的优秀教程。
由于没有答案,我将提供一个关于 ajax 如何在 JSF 中工作的基本观点。JSF 中有一个特殊的 Javascript 库,可以使用jsf.ajax.request(...)
. 为了简化开发,您可以将 ajax 行为附加到某些组件。通常,您将<f:ajax>
在您选择的组件上使用标签,例如<h:commandButton>
,为其添加 ajax 功能。
在过去,我们会XMLHttpRequest
通过 get 或 post 向服务器发送异步消息,然后等待服务器向我们发送回发数据,我们通常会以 JSON 或 XML 格式获取这些数据,以供客户端处理并通过document.getElementById(...)
或更方便的方法更新视图由现代 Javascript 库引入。我认为最终这就是 JSF 在幕后所做的。
在 JSF 2.0<f:ajax>
中引入了标签,它有助于部分提交数据、在服务器上处理数据并部分更新您的视图。为此,ajax 标记具有以下最重要的特性/属性:<f:ajax execute="..." render="..." event="..." listener="..." onevent="..." />
. 让我们仔细看看它们。
execute
属性通过指定元素 ID 列表告诉 JSF 在此请求期间应该在服务器上更新/处理哪些元素;render
属性告诉 JSF 在 ajax 调用完成后应替换哪些组件 - 在服务器上呈现的新元素应在部分页面更新后替换具有指定 id 的旧元素;event
属性定义将发生 ajax 调用的事件,例如,在命令按钮的情况下,事件可能是单击事件,在输入文本字段的情况下,事件可能是按键或模糊事件;listener
属性定义了对类型的托管 bean 方法的绑定,该方法public void processAjaxRequest (AjaxBehaviorEvent event) { }
将在 ajax 请求上触发并在部分页面更新完成之前在服务器上执行;onevent
属性定义了在 ajax 请求的不同阶段调用的 javascript 函数。您可以在此处查阅 Marty Hall 编写的关于 ajax 的另一个优秀教程。
我不打算对 JSF 2.0 中的 ajax 特性做一个概述,而是做一个简短的介绍来获得对 ajax 功能的基本掌握。