0

我使用过 JSF 1.2 但对 JSF 2.0 是新的。似乎 JSF 2.0 通过无缝支持 ajax 功能,<f:ajax> 但我还不清楚如何?我想了解是什么让这两种强大的技术如此完美地协同工作?两个生命周期如何交互?

PS:我熟悉ajax和javascript。所以你可以在这个前提下做出你的答案。

4

1 回答 1

1

这个问题非常广泛,我建议搜索适当的标签以了解其在实际情况中的用法。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="..." />. 让我们仔细看看它们。

  1. execute属性通过指定元素 ID 列表告诉 JSF 在此请求期间应该在服务器上更新/处理哪些元素;
  2. render属性告诉 JSF 在 ajax 调用完成后应替换哪些组件 - 在服务器上呈现的新元素应在部分页面更新后替换具有指定 id 的旧元素;
  3. event属性定义将发生 ajax 调用的事件,例如,在命令按钮的情况下,事件可能是单击事件,在输入文本字段的情况下,事件可能是按键或模糊事件;
  4. listener属性定义了对类型的托管 bean 方法的绑定,该方法public void processAjaxRequest (AjaxBehaviorEvent event) { }将在 ajax 请求上触发并在部分页面更新完成之前在服务器上执行;
  5. onevent属性定义了在 ajax 请求的不同阶段调用的 javascript 函数。

您可以在此处查阅 Marty Hall 编写的关于 ajax 的另一个优秀教程。

我不打算对 JSF 2.0 中的 ajax 特性做一个概述,而是做一个简短的介绍来获得对 ajax 功能的基本掌握。

于 2013-02-11T17:30:18.363 回答