Java 在会话范围的Bean中构建列表

Java 在会话范围的Bean中构建列表,java,jakarta-ee,primefaces,cdi,Java,Jakarta Ee,Primefaces,Cdi,我对PrimeFaces5和JSF2.1有问题 现在无法发布代码,因为我在平板电脑上,但稍后我会给出基本描述并上传代码 我有一个ConversationScopedcdibean和一个带有5个文本字段的JSF页面,映射到一个实体、一个primefaces数据视图和一个按钮。我要做的是不断将字段中的数据添加到dataView中 我在bean类中有一个列表,比如说,private List data=new ArrayList 我有一个方法,可以通过按下按钮将数据添加到数组中来触发,但是每次我添加数

我对PrimeFaces5和JSF2.1有问题

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

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

我在bean类中有一个列表,比如说,
private List data=new ArrayList

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

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

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

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


谢谢

因为您这里没有代码,我不得不猜测一下,但我认为问题在于您的
@ConversationScoped
bean,或者更确切地说是对其生命周期的理解

除非您使对话长时间运行,否则此作用域将与
@requestscope
的行为相同-它将在每次请求后丢弃,并在新请求后重新创建。这意味着每次都将重新创建其中的
列表

在这里,您需要的是使对话长时间运行,这通常是通过以下方式进行的:

@ConversationScoped
public class YourBean {

    @Inject Conversation conversation

    // call this sometime within the first request
    public void conversationStartingMethod() {
        conversation.begin();
    }

}

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

发布您的代码,并澄清在开始对话时替换所有条目的意思?你把它标为长跑了吗?每次按下按钮,如果会话没有长时间运行,或者下一个请求中没有cid,那么您的会话范围bean实际上就是请求范围bean对不起,没有代码,我正在atm上旅行,没有计算机访问权限。我的对话开始的很好,但是当我将第一个项目添加到列表中时,它运行的很好,因此我得到了一个dataEntity类型的条目,比如e1,但是当我添加第二个条目,比如e2时,列表中包含两个条目,但都是e2,以此类推。本质上,这个列表包含第N个入口中的N个。嗯,我明白你的意思。我将等待您发布代码——这听起来更像是代码中的一些小错误(您将其存储到列表中的方式),而不是其他任何东西。