Seam - 无缝集成JSF,第2部分: 借助Seam进行对话 - 编程入门网
if (coursesModel == null) {
System.out.println("Retrieving courses...");
coursesModel = new ListDataModel(courseManager.getAll());
}
return coursesModel;
}
public void setCourses(DataModel coursesModel) {
this.coursesModel = coursesModel;
}
}
清单 6 中的方法只是切断数据检索和数据访问的尝试之一。无论您制定什么样的解决方案,保持数据的可用性直到不再需要是避免冗余数据获取的关键。幸运的是,这类上下文状态管理正是 Seam 所擅长的! 上下文状态管理 Seam 使用工厂模式初始化非组件对象和集合。一旦初始化数据之后,Seam 就可以将生成的对象放到一个可用的作用域中,然后就可以在其中反复读取,而不再需要借助工厂方法。这个特殊的上下文就是 conversation 作用域。conversation 作用域提供了在一组明确定义的请求期间临时维护状态的方法。 直到最近,也很少有 Web 应用程序架构提供任何类型的能够表现对话的构造。现有的任何上下文都没有提供合适的粒度水平,用于处理多请求操作。您会发现,对话提供了一种方式,可以防止短期存储丢失,而短期存储丢失在 Web 应用程序中很常见,并且还是滥用数据库的根本原因。结合工厂组件模式使用对话使得在合适时咨询数据库成为可能,而不是为了重新获取应用程序未能跟踪的数据。 使用对话防止存储丢失 要完成一项任务,应用程序常常必须指导用户浏览一系列屏幕。该过程通常需要多次向服务器发出 post,或者是由用户直接提交表单,或者通过 Ajax 请求。在任何一种情况下,都应该能够在用例期间通过维护服务器端对象的状态跟踪该应用程序。对话相当于逻辑工作单元。它允许您借助确定的起始点和结束点在单个浏览器窗口中为单个用户创建单独的上下文。用户与该应用程序的交互状态是针对整个对话维护的。 Seam 提供了两类对话:临时对话和长时间运行的对话。临时对话 存在于整个请求过程,包括重定向。这项功能解决了 JSF 开发过程中的一项难题,即重定向将无意中丢弃存储在 FacesContext(如 FacesMessage 实例)中的信息。临时对话是 Seam 中的标准操作模式:您可以免费获得这些模式。这意味着在经过重定向之后取出的任何值仍然能够存在,而不需要您执行额外的工作。这项功能是安全网,允许 Seam 自由地在任意适当的时候使用重定向。 相比之下,长期运行的对话 能够在一系列明确定义的请求期间保持作用域中的变量。您可以在配置文件中定义对话边界,借助注释进行声明,也可以借助 Seam API,通过编程对其进行控制。长期运行的对话有点像小会话,隔离在自己的浏览器选项卡中(或窗口),能够在对话结束或超时时自动清除。与对应的会话相比,conversation 作用域的要点之一是:conversation 作用域将发生在同一应用程序屏幕上位于多个浏览器选项卡中的活动分离开。简单地讲,使用对话消除了并发冲突的危险。(请参见 参考资料 阅读关于 Seam 如何隔离并发对话的详细讨论。) Seam 对话是对 ad-hoc 会话管理方法的重大改进,后者是现场临时准备的,或者是其他框架鼓励使用的。conversation 作用域的引入还解决了很多开发人员指出的问题,即 JSF 使用对象打乱了 HttpSession,没有提供任何自动垃圾回收 (GC) 机制。对话允许您创建有状态的组件,而不必使用 HttpSession。借助 conversation 作用域,几乎不再需要使用会话作用域,并且您可以更为随意地使用。 Seam - 无缝集成JSF,第2部分: 借助Seam进行对话(5)时间:2011-06-25 IBM Dan Allen借助 Seam 创建对象 回到课程列表示例,这时该重构代码,以利用工厂模式。目的是允许 Seam 管理课程集合,以便其在请求(包括重 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |