- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
借助 Ajax 自动保存 JSF 表单
借助 Ajax 自动保存 JSF 表单: 第 2 部分
在服务器端管理表单数据
文档选项
打印本页
将此页作为电子邮件发送
未显示需要 JavaScript 的文档选项
讨论
样例代码
级别: 中级
Andrei Cioroianu, 高级 Java 开发人员和顾问, Devsphere
2007 年 10 月 08 日
在 “用 Ajax 自动保存 JSF 表单” 系列的第 1 部分中,作者兼 Java 开发人员 Andrei Cioroianu 为您展示了如何借助 Asynchronous JavaScript + XML(Ajax)和 JavaServer Faces(JSF)技术构建能自动保存 Web 表单的 Java 应用程序,介绍了如何用 JavaScript 和 XMLHttpRequest 获得、编码和提交表单数据,如何调整 JSF 请求生命周期来处理 Ajax 请求以及如何在服务器端从 JSF 组件树获取所提交的数据 。在这个包含三部分的系列文章的第 2 部分中,您将了解如何识别跨浏览器会话的匿名用户、如何为多个用户和页面管理自动保存的表单数据、如何选择数据存储库以及如何处理线程安全性问题。
简介
本系列的第 1 部分 中描述了这样一个场景:其中,应用程序在服务器上自动保存表单数据,在用户关闭或重新打开浏览器后,表单可以恢复。这个解决方案即使在用户浏览器失效或用户没有在 Web 表单上单击 Submit 就离开应用程序之后也可以很好地工作。
本文所附的示例应用程序(请参见 下载)包含了一个名为 SupportForm.jsp 的典型 JSF 表单,此表单的数据通过 AutoSaveScript.js 文件的 JavaScript 函数定期提交给服务器。SupportForm.jsp 和 AutoSaveScript.js 均在本系列 第 1 部分 做过介绍,该部分还展示了如何使用 JSF 阶段侦听器在不干扰应用程序逻辑的前提下处理 Ajax 请求。
在本文中,您将学习如何构建线程安全的数据存储库来自动保存表单数据。您将看到如何选择数据结构、如何用用 JSF 组件树提取出的表单数据填充这些结构、如何恢复 JSF 组件的状态、如何限制数据存储库的内存资源以及如何实现其持久性。您还会了解到几个 Web 技巧,例如如何使用过滤器和浏览器 ID cookies。
跨会话识别用户
developerWorks Ajax 资源中心
请访问 Ajax 资源中心,这里几乎囊括了关于 Ajax 编程模型的所有信息,包括各种文章和教程、论坛、博客、wikis、活动和新闻。
要在用户关闭和重新打开浏览器之后恢复 Web 表单,应用程序要能跨会话识别用户,如果用户做过身份认证,这一点并不难实现。如果应用程序使用标准方法进行用户认证,就可以调用 getUserPrincipal() 方法,此方法在 HttpServletRequest 接口中定义,然后再用 java.security.Principal 的 getName() 方法获取用户名。
如何应用程序支持匿名用户的表单保存和表单恢复特性,您也可以设置浏览器 ID,这个 ID 与会话 ID 十分类似,只不过后者是在单一的会话中跟踪用户。实际上,当用户首次访问应用程序时,可以取得会话 ID cookie 的值并设置另一个名为 BROWSERID 的 cookie。与会话开始生成、会话结束失效的会话 ID 不同,BROWSERID cookie 只设置一次,且可以在很长一段时间(比如几年)后才失效。
用户会感谢您
本文接下来将会介绍在 Ajax 应用程序中构建自动保存功能如何能让用户的 Web 体验更加方便和高效。与此同时,您还可以获得几个高级的 Web 技巧,比如使用过滤器和用户浏览器 ID cookie。
使用 servlet 过滤器
servlet 过滤器非常适合设置 BROWSERID cookie,因为当用户首次访问应用程序时,此过滤器可以截取每个 HTTP 请求,并将此 cookie 添加到 HTTP 响应。一旦浏览器通过第一个响应收到此 cookie,那么所有后续响应都将包含 BROWSERID cookie,这样应用程序能够通过其浏览器 ID 来识别匿名用户。本文所附带的示例代码包含一个名为 BrowserIdFilter 的类,它实现了 javax.servlet.Filter。此类还有一个名为 getBrowserId() 的方法(参见 清单 1),它迭代请求对象的 cookie,返回 BROWSERID cookie 的值或 null(如果这样的 cookie 不存在)。
清单 1. 获得浏览器 ID cookie
p
文档评论(0)