会话范围 - 会话传播

时间:2013-01-23 19:38:36

标签: jsf primefaces cdi jboss-weld conversation-scope

在JSF页面上,每个句柄文件上载事件都会创建一个新的Bean实例。好像它每次都像一个新客户。此外,Web浏览器似乎也是一个不同的客户端。

那么,这些FileUploadEvents是否只有来自一个浏览器的实例化只有一个Bean?

我正在尝试使用CDI而不是@ViewScoped JSF bean。

的index.xhtml:

<p:fileUpload fileUploadListener="#{bean.handleFileUpload}"/>

豆:

@Named
@ConversationScoped
public class Bean {

//code

@Inject
Conversation conversation;

public void HandleFileUpload(FileUploadEvent fileUploadEvent){
if(conversation.isTransient()){ //Always true :(
   conversation.begin(); 
}
//Beans get created each time it needs to access this method.

}

1 个答案:

答案 0 :(得分:2)

我误解了 @ConversationScoped

对话应该在开始访问给定链接之前开始。

意味着如果一个人访问一个链接,之前没有开始对话,那么该bean的行为类似于@RequestScoped bean。因此,刷新附加到 @ConversationScoped 的一个页面将创建&amp;每次都要毁灭。

解决方案是在访问链接之前开始对话,因此?cid = 10 将包含在网址中。