SEAM框架之我见--关于Conversation

编程知识 更新时间:2023-05-02 21:15:01
以前,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)标注方法终止。   三、用法 1.       调用有状态会话bean中带@Begin 标注方法时开始conversation ,带@End标注方法时结束conversation。 2.       用Get request开始conversation。因为普通JSF页面通过get方式请求时不能触发任何事件侦听方法,而有时用户又希望页面被访问即开始conversation,访问其中的状态。为此,seam提供了一个内置的方法来解决这个问题,开发人员只需在pages.xml定义访问页面时希望触发的事件即可。例如:   &lt;pages&gt; &lt;page view-id="/dvd.xhtml" action="#{search.selectFromRequest}"/&gt; &lt;/pages&gt;        <pages></pages>      <pages></pages>   <page action="#{search.selectFromRequest}" view-id="/dvd.xhtml"></page>         

更多推荐

SEAM框架之我见--关于Conversation

本文发布于:2023-04-28 17:08:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/a61b355d1e1cc0d221d2c18628a8ad57.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:我见   框架   SEAM   Conversation

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 109244文章数
  • 27724阅读数
  • 0评论数