以前,web application中用到的Context主要有request context、session context、application context。seam中主要新增的两个Context 是conversation context和business process context。
Business process context主要用于工作流方面,让我最感兴趣的是conversation context,可以说seam的核心是conversation context。下面谈谈我对conversation context的理解。
一、概念
Seam官方文档对conversation context的解释包含三个方面:workspace、application transaction with optimistic semantics、workflow task。Workspace的功能在我经历的项目中尚未用到,我认为conversation context是完成一项工作经过的一系列步骤:可以包括一个或多个界面的多次用户交互、多次用户请求、多个数据库事务。在整个过程中涉及的状态及变化保存在conversation context。这也是seam强调自己与其他无状态框架不同,是有状态框架的原因所在。
以一个用户注册的例子为例:假设整个注册过程包含三个页面,第一个页面包括用户名、口令、口令验证,第二个页面包括用户的基本信息如真实姓名、地址、Email、电话等,第三个页面包括用户信用方面的信息。Seam建议的做法是建立二个类:一个是用户类,这是一个实体对象,一个用户注册类、这是一个stateful session bean,其中包含一个用户
属性,及一个口令验证码。第一个页面开始时,conversation context建立;第一个页面提交后,保存用户名、口令信息于会话bean并验证口令,会话bean保存在conversation context; 第二个页面提交后用户基本信息也保存到会话bean;第三个页面提交后用户信息收集完成,会话bean保存用户信息到数据库,然后销毁会话bean, conversation context结束。
二、Conversation 模型
Conversation 模型遵循如下规则:
1. conversation context分二种:long-running conversation context和temporary conversation context。 JSF生命周期的每个阶段都有一个活动的conversation,conversation;
2. 在JSF生命周期的第一个阶段—restore view阶段,seam恢复先前的long-running conversation context,如果没有,seam创建一个temporary conversation context。
3. 当遇到有状态会话bean中方法带@Begin标注时,temporary conversation context提升为long-running conversation context,conversation开始;
4. 当遇到有状态会话bean中方法带@End标注时,long-running conversation context降级为temporary conversation context,conversation结束;
5. 在JSF生命周期的最后一个阶段—响应视图呈现后,seam保存long-running conversation context中的有状态对象或销毁temporary conversation context中的对象;
6. 一般情况下,页面请求(JSF Post)传递conversation context到下一阶段,非页面请求(如Get 请求)不传递conversation context到下一阶段;
7. 如果JSF生命周期被重定向截断,seam仍存储并恢复当前conversation context,除非当前conversation context被@End(beforeRedirect=true)标注方法终止。
三、用法
2. 用Get request开始conversation。因为普通JSF页面通过get方式请求时不能触发任何事件侦听方法,而有时用户又希望页面被访问即开始conversation,访问其中的状态。为此,seam提供了一个内置的方法来解决这个问题,开发人员只需在pages.xml定义访问页面时希望触发的事件即可。例如:
<pages><page view-id="/dvd.xhtml" action="#{search.selectFromRequest}"/> </pages>
<pages></pages>
<pages></pages>
<page action="#{search.selectFromRequest}" view-id="/dvd.xhtml"></page>
分享到:
相关推荐
6. **对话:Seam 的工作单元 (The Conversation: Seam's Unit of Work)** - **对话概念**:Seam 通过对话的概念来管理应用程序的状态,确保每个对话都是一个独立的工作单元。 - **应用场景**:例如,在电子商务...
#### 一、Seam框架简介及seam-gen命令的作用 Seam框架是一款基于Java EE标准的轻量级企业级应用框架,它极大地简化了Java EE应用的开发流程,使得开发者能够更加高效地构建复杂的业务逻辑。Seam框架支持多种Java EE...
标题中的“Jboss seam3 实战”表明,本文将重点介绍JBoss Seam框架的第三个版本的实际应用。JBoss Seam是一个开源的Java EE框架,它通过依赖注入和会话模型,简化了基于Java EE的企业级应用开发。Seam框架为开发者...
### 关于Seam框架的关键知识点 #### 一、Seam框架概述 - **定义与功能**:Seam定义了一个统一的组件模型,适用于应用程序中的所有业务逻辑。它允许开发人员创建状态化的组件,并将这些组件的状态与不同的上下文...
1.6.3. 理解Seam 业务对话(Conversation)................................................................................................................. 48 1.6.4. Seam 的UI 控制库.........................
本资料集合包括《Seam in Action》和Seam官方参考手册,是深入学习Seam框架的理想资源。 ### 《Seam in Action》 这是一本由Dan Allen和Davin Bunk编写的专业书籍,详细介绍了Seam框架的各个方面。这本书适合已经...
在JBoss Seam框架中,`@Name`注解主要用于定义一个Seam组件。为了确保组件能够被正确识别与使用,每个Seam组件都必须拥有一个唯一的名称标识,即通过`@Name`来指定。例如: ```java @Name("componentName") public ...
- **新建Seam Action**:Seam Actions是Seam框架的核心组成部分之一。这部分内容详细介绍了如何通过向导来创建一个新的Seam Action。 - **新建Seam Form**:Seam Forms允许开发者轻松地创建表单,并处理用户的输入...
在Seam框架提供的示例中,包含了多个具体应用场景下的实践案例,这些例子不仅帮助开发者快速上手Seam,还能深入理解框架的设计思想和技术细节。 ##### 1. 注册示例 (Registration Example) - **理解代码**:此示例...
2. **Seam框架准备**: - 获取JBoss Seam的对应版本,确保与Geronimo服务器兼容。 - 解压Seam的发行版,包含所需的库和示例应用。 3. **Seam应用构建**: - 使用Eclipse、NetBeans等集成开发环境(IDE),创建一...
- **创建CRUD数据库应用程序**:使用Seam框架可以快速搭建具有增删改查功能的应用程序,包括数据库设计、实体类生成、页面开发等步骤。 #### 九、CRUD应用程序实战演示 - **使用CRUD应用程序**:介绍如何使用已经...
### 关于Seam 2.0中文文档的关键知识点解析 #### 一、Seam简介及入门 ...通过对上述关键知识点的学习,开发者能够更好地理解和掌握Seam框架的核心技术和应用场景,从而更加高效地开发出高质量的Java Web应用。
JBoss Seam 是一款基于 Java 的企业级应用开发框架,它简化了应用程序的开发过程,特别是那些涉及复杂的用户交互、业务逻辑以及数据处理的应用。Seam 结合了 JavaServer Faces (JSF)、Java Persistence API (JPA)、...
这个监听器会在容器加载应用程序时初始化Seam框架。 完成上述基础配置后,开发者就能在任何支持JSF的容器中使用Seam了。不过,Seam还提供了对Ajax和EJB 3的支持,需要根据项目需求进行额外的配置。 接下来,我们来...
描述:本书是关于Seam框架的参考指南,旨在为Java EE 5开发者提供深入理解与应用Seam的知识点。 ### Seam框架概览 Seam框架是为Java EE 5环境设计的一个企业级应用程序框架,它极大地简化了开发过程,提供了更为...
描述:本文将详细介绍JBoss Seam框架的核心概念、关键特性以及如何构建基于Seam的应用程序。Seam作为一个企业级Java Web应用框架,它将Java EE和JSF无缝集成,旨在填补Java EE 5.0中缺失的框架角色,并为JSR299: Web...
### JBoss Seam中文版知识点详解 #### JBoss Seam简介 JBoss Seam是一个强大的企业级应用开发...通过对这些内容的学习,开发者可以更加深入地理解和掌握Seam框架的核心技术和应用场景,从而提高开发效率和应用质量。
- **理解 Seam 业务对话(Conversation)**:解释了业务对话在 Seam 中的作用和意义,以及如何设计有效的对话来提高用户体验。 - **Seam 的 UI 控制库**:介绍了 Seam 提供的一系列 UI 控件,这些控件可以帮助开发者...
《Practical JBoss Seam》是一本深入探讨JBoss Seam框架技术的书籍,其源代码包含在提供的压缩包中。Seam是一种开源的企业级Java框架,它整合了多种技术和概念,如JavaServer Faces (JSF)、Java Persistence API ...