我有点困惑我的有状态支持bean上使用哪个范围,我目前有一个bean,通过JSF将用户结果传递到xhtml页面,bean使用默认(对话范围),标记@Create方法as @Begin(join = true)....这应该使bean加入当前长时间运行的对话,对吧?SEAM会话或对话范围的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(){}
}
谢谢Stefano,这确实为我澄清了一些事情,我不希望每次都重新启动bean的原因是create方法包含一些我不想继续重复的大型数据库事务。我曾尝试删除'@Begin'注释,但每次仍然重新启动bean,我也检查过其他地方没有'@End'的实例...您能举个例子来传播对话吗? – DaveB
我通过使用
元素来实现此目的,而不是标准的 .... Thankyou将我指向正确的方向;-) – DaveB