在会话作用域Bean中构建列表



我对Primefaces 5和JSF 2.1有问题。

由于我在平板电脑上,现在无法发布代码,但我稍后会给出基本描述并上传代码。

我有一个ConversationScopedCDIbean和一个JSF页面,其中有5个文本字段,映射到一个实体、一个primefaces dataView和一个按钮。我想做的是不断将字段中的数据添加到dataView中。

我在bean类中有一个List,比如private List<dataEntity> data = new ArrayList<dataEntity>

我有一个方法,它是通过按下将数据添加到数组的按钮来触发的,但每次添加数据时,列表中的所有条目都会被最新的条目替换。

本质上,该列表包含第N个条目的N个副本

我曾想过先将每个条目保存到数据库中,然后从中填充列表,但这似乎不合逻辑

这两天来一直困扰着我。有人能为这个问题提出一些解决办法吗。如果可能的话,我想使用CDI-beans而不是JSF-Managed。

感谢

由于您这里没有代码,我将不得不进行一些猜测,但我认为问题在于您的@ConversationScopedbean,或者更确切地说是对其生命周期的理解。

除非您使会话长期运行,否则此作用域的行为将与@RequestScoped相同——它将在每次请求后被丢弃,并在新请求后重新创建。这意味着每次都会重新创建其中的List

在这里,你想要的是让对话持续很长时间,这通常是通过以下方式实现的:

@ConversationScoped
public class YourBean {
@Inject Conversation conversation
// call this sometime within the first request
public void conversationStartingMethod() {
conversation.begin();
}
}

或者,您可以让您的bean变成@SessionScoped,这将使它在整个HTTP会话中都有效(或者除非超时/无效)。

最新更新