![](/img/trans.png)
[英]Is it safer to inject an EVENT scoped bean into a CONVERSATION/SESSION scoped bean?
[英]Building a List within Conversation Scoped Bean
我在Primefaces 5和JSF 2.1上遇到问题。
我现在无法在平板电脑上发布代码,但是我将提供基本说明并稍后上传代码。
我有一个ConversationScoped
CDI bean和一个具有5个文本字段的JSF页面,映射到一个实体,一个primefaces dataView和一个按钮。 我想要做的是继续将字段中的数据添加到dataView中。
我在Bean类中有一个列表,说是private List<dataEntity> data = new ArrayList<dataEntity>
。
并且我有一个方法,该方法通过按下将数据添加到数组的按钮来触发,但是每次添加数据时,列表中的所有条目都会被最新的条目替换。
本质上,该列表包含第N个条目的N个副本
我考虑过将每个条目保存到数据库中并从中填充列表,但这似乎是不合逻辑的。
在最近的两天里,这让我很沮丧。 任何人都可以对这个问题提出一些解决方案。 如果可能的话,我想使用CDI bean而不是JSF Managed。
谢谢
既然这里没有代码,我将不得不作一些猜测,但是我认为问题出在您的@ConversationScoped
bean,或者更确切地说是对其生命周期的理解。
除非您使对话长时间运行,否则此作用域的作用与@RequestScoped
-在每个请求后将其丢弃并在新请求后重新创建,这意味着每次将重新创建其中的List
。
您想要的是使对话长时间运行,通常可以通过以下方式进行:
@ConversationScoped
public class YourBean {
@Inject Conversation conversation
// call this sometime within the first request
public void conversationStartingMethod() {
conversation.begin();
}
}
或者,您可以改为使用@SessionScoped
bean,这将使其在整个HTTP会话中都处于活动状态(或除非超时/无效)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.