Sim*_*mon 3 java cdi seam-conversation java-ee-6 jboss-weld
我有一个@ConversationScoped bean,带有一个start方法,如下所示:
@PostConstruct
public void start() {
if (conversation.isTransient()) {
conversation.begin();
log.debug("conversation.getId(): " + conversation.getId());
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,每次刷新页面时都会启动一个新会话,每次我对bean中的方法进行AJAX调用时,也会启动一个新的会话(这是我的主要问题).
我真正想要发生的是让sam对话流连,直到我手动调用conversation.end().我在这里错过了什么?
稍微偏离主题,但希望有价值:
我不是100%确定@PostConstruct是开始对话的合适场所.我宁愿使用像这样的面部事件:
<f:metadata>
<f:event type="javax.faces.event.PreRenderViewEvent"
listener="#{myBean.init}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
如果您确定不在JSF回发请求中,请启动对话.
public void init() {
if (!FacesContext.getCurrentInstance().isPostback() && conversation.isTransient()) {
conversation.begin();
}
}
Run Code Online (Sandbox Code Playgroud)
如果你使用Seam 3,它会更容易:
<f:metadata>
<s:viewAction action="#{myBean.init}" if="#{conversation.transient}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6084 次 |
| 最近记录: |