我对在有状态的支持 bean 上使用哪个范围有点困惑,我目前有一个通过 JSF 将用户结果传递到 xhtml 页面的 bean,该 bean 使用默认值(对话范围),@Create 方法标记为 @ Begin(join=true)....这应该使 bean 加入当前长期运行的对话,对吗?
但是我发现,当用户导航到不同的页面,然后再次返回时,@Create 方法在支持 bean 上再次被调用,我想避免这种情况
我发现解决此问题的唯一方法是将 bean 标记为 @Scope(ScopeType.SESSION) ,它在用户登录会话的整个生命周期内维护 bean(如预期的那样)。
但是在 SEAM 文档中阅读了几次后,以这种方式使用会话范围的支持 bean 是不好的做法......我的问题是,我如何阻止会话范围的 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(){}
}