java - SEAM session 还是 session 作用域 bean?

标签 java seam seam2 seam-conversation

我对在我的有状态支持 bean 上使用哪个范围有点困惑,我目前有一个通过 JSF 将用户结果传递到 xhtml 页面的 bean,该 bean 使用默认值(对话范围)和 @Create 方法标记为 @Begin(join=true)...这应该使 bean 加入当前长时间运行的对话,对吗?

但是我发现,当用户导航到不同的页面,然后再次返回时,@Create 方法会在支持 bean 上再次被调用,这是我想避免的

我发现的解决这个问题的唯一方法是将 bean 标记为 @Scope(ScopeType.SESSION),它在用户登录 session 的生命周期内维护 bean(如预期)。

但是在 SEAM 文档中读过几次后,发现以这种方式使用 session 作用域支持 bean 是不好的做法...我的问题是,如何阻止 session 作用域 bean 在每次重新加载页面时重置...我觉得我错过了一些关于对话范围的基本内容??!有人可以启发我吗

我在下面包含了相关 bean 的编辑版本...

@Stateful
@Scope(ScopeType.CONVERSATION)
@Name("sessionActions")
@Restrict("#{identity.isLoggedIn()}")
public class SessionActionsBean implements SessionActions, Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Logger private Log log;

@RequestParameter private String sId;
@In Redirect redirect;
@In private MessagePoster messagePoster;
@In private Map<String, String> messages;


@Create
@Begin(join=true)
@Override
public void create(){
        log.debug("bean is being created")
    }

//--------------------------- Cleanup methods
@Remove
@BypassInterceptors
@Override
public void cleanUp(){}

}

最佳答案

每次都会重新创建您的 bean,因为当您返回该页面时,您可能会进行新的对话。

如果您需要保持对话开放,您应该在导航过程中查看对话传播机制。

但是,如果逻辑需要的话,每次重新创建 bean 并没有什么问题。如果您担心性能,请不要在正确的分析之前对对象创建进行预防性假设。

如果您的 @Create@Remove 方法管理的资源范围比 session 范围更广,则应该将您的 session 范围 Bean 与管理该资源的另一个 session 范围 Bean 分开.

这是一个相当抽象的推理,但我希望它能有所帮助。

关于java - SEAM session 还是 session 作用域 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10535967/

相关文章:

javascript - 表单验证清除 JavaScript 字段

java - 如何让 JSF2 与 Seam2 一起工作

java - 使用 Spring 进行 MongoDB 复制

java - 格式化Hadoop中的namenode:IllegalArgumentException Uri具有权限组件

java - Mercurial 项目中包重命名的问题

java - 项目开始前的jbpm问题

java - Hibernate,EHCache,读写缓存,将项目添加到列表

java - 我的 Java Web 应用程序的类似 Facebook 的聊天功能

java - JSF 实体转换错误 : rich suggestionbox Conversion Error setting value '*' for 'null Converter'

java - 如何使用索引将字符替换为字符串