seam框架中的conversation是个非常的棒的东西,但是在页面开启长对话后,结束的方法比较困惑,使用@End注解终觉得不踏实。我现在尝试的事件驱动模型解决方案如下。
在导航文件中如下配置:
<page view-id="/test/*" login-required="true"></page>
<page view-id="/test/listDepartment.xhtml">
<action execute="#{org.jboss.seam.core.events.instance().raiseEvent('pageScopeControl', 'department')}"/>
<navigation from-action="#{departmentBean.add}">
<redirect view-id="/test/editDepartment.xhtml" />
</navigation>
</page>
然后建立一个Observer组件:
@Name("pageScopeObserver")
@Scope(ScopeType.SESSION)
public class PageScopeObserver {
private String curPageScope;
private String prePageScope;
@In(value = "org.jboss.seam.core.conversation",required = false)
Conversation conversation;
@Observer("pageScopeControl")
synchronized public void fetchPageScopeEvent(String pageEvent) {
curPageScope = pageEvent;
if (curPageScope.equals(prePageScope) == false) {
prePageScope = curPageScope;
if (conversation != null) {
conversation.end();
conversation.leave();
}
}
}
这样可以实现通过定制各种不同的事件类型,将单个页面或一组页面的conversation管理起来。
希望大家提点意见。
分享到:
相关推荐
3. **组件名称和作用域**:讲解了如何定义组件的名字以及它们的作用范围。 4. **双向注入**:描述了Seam如何支持组件之间的相互引用。 5. **生命周期方法**:介绍了组件在不同阶段触发的回调方法,帮助开发者更好地...
2. **@Scope**:定义组件的作用域,如`Page`, `Event`, `Session`, `Application`, 和 `Conversation`。`Conversation`是Seam特有的,它可以维持跨越多个HTTP请求的状态,这对于保持某些数据的持久性非常有用,尤其...
### jboss-seam 注解详解 ...以上是对JBoss Seam中常用注解的详细介绍,这些注解可以帮助开发者更好地管理和控制组件的行为和作用域。通过合理地使用这些注解,可以有效地提高应用程序的性能和可维护性。
- **定义组件作用域**:通过配置文件或注解,可以指定组件的作用域,如会话作用域、请求作用域等。 - **具有多个角色的组件**:一个组件可以扮演不同的角色,这增加了组件的灵活性。 - **内置组件**:Seam 提供了一...
Seam组件可以是无状态Session Bean、有状态Session Bean、实体Bean、JavaBeans、消息驱动Bean等,支持拦截器、多角色组件以及自定义作用域,为开发者提供了灵活的编程模型。 综上所述,Seam是一个强大的Java EE框架...
- `@ScopeType("conversation")`:指定组件的作用域为会话范围,这意味着它会在用户会话期间保持状态。 #### 八、配置和部署 - **Ant构建脚本**:使用Ant构建工具来编译项目,并生成可部署的`.ear`文件。 - **部署...
- **`@Conversational`**: 声明组件为对话作用域,确保组件方法仅在长期运行的对话活动时可被调用。 #### 六、`@Startup` - **`@Startup`**: 用于Application或Session Scope的组件,使其在相应的上下文创建时立即...
这一模型将应用程序中的组件放置于不同的“情境”中,每个情境都有其特定的生命周期和作用域,从而使得组件能够在不同的情境下表现出不同的行为。情境组件模型包括以下几种主要情境: 1. **状态无情景境(Stateless ...
1.5. Seam 页面流:猜数字范例........................................................................................................................................ 40 1.5.1. 理解代码....................
`name`属性定义了上下文变量的名字,而`scope`属性定义了上下文变量的作用域。 ##### 4. `@Roles` 注解 - **用途**:允许一次性指定多个`@Role`注解。 - **示例**: ```java @Name("userComponent") @Roles({ ...