WEB开发网
开发学院软件开发Java JSF 2 fu: Ajax 组件 阅读

JSF 2 fu: Ajax 组件

 2010-06-08 00:00:00 来源:WEB开发网   
核心提示: 清单 5 中的 JavaScript 包括三个函数,我把它们放置在 com.corejsf 名称空间的内部,JSF 2 fu: Ajax 组件(7),我实现了名称空间(从技术上说是一个 JavaScript 字面对象),以防止其他人有意或无意修改我的三个函数,这种延时是必要的,因为该值会在 Aj

清单 5 中的 JavaScript 包括三个函数,我把它们放置在 com.corejsf 名称空间的内部。我实现了名称空间(从技术上说是一个 JavaScript 字面对象),以防止其他人有意或无意修改我的三个函数。

如果这些函数未包含在 com.corejsf 中,则其他人可以实现自己的 updateCompletionItems 函数,从而将我的实现替换成它们。一些 JavaScript 库可以实现一个 updateCompletionItems 函数,但最理想的情况是任何人都不用设计 com.corejsf.updateCompletionItems。(相反,抛弃 com,并使用 corejsf.updateCompletionItems 可能已经足够,但有时会难以控制。)

因此,这些函数做了些什么? updateCompletionItems() 函数向服务器发起 Ajax 请求 — 通过调用 JSF 的 jsf.ajax.request() 函数 — 要求 JSF 仅在 Ajax 调用返回时呈现列表框组件。 updateCompletionItems() 函数还传递了两个额外的参数到 jsf.ajax.request() 中:列表框左上角的 x 和 y 坐标。jsf.ajax.request() 函数会将这些函数参数转换为通过 Ajax 调用发送的请求参数。

JSF 会在文本输入失焦时调用 inputLostFocus() 函数。该函数的作用是使用 Prototype 的 Element 对象来隐藏列表框。

updateCompletionItems() 和 inputLostFocus() 将它们的功能存储在一个函数中。然后,它们安排自己的函数分别在 350ms 和 200ms 时执行。换句话说,每个函数都有各自的任务,但它会让任务延时 350ms 或 200ms。文本输入会在 keyup 事件后延时,因此,updateCompletionItems() 方法会最多每隔 350ms 发送一个 Ajax 请求。其思想是,如果用户输入速度极快,则不会让 Ajax 调用淹没服务器。

inputLostFocus 函数会在文本输入失焦时调用,并延时其任务 200ms。这种延时是必要的,因为该值会在 Ajax 调用返回时复制到列表框之外,并且列表框必须为可见才能确保它正常运行。

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:JSF fu Ajax

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接