我遇到了Primefaces 5和JSF 2.1的问题。
我现在无法在平板电脑上发布代码,但我会在稍后提供基本说明和上传代码。
我有一个ConversationScoped
CDI bean和一个带有5个文本字段的JSF页面,映射到一个实体,一个primefaces dataView和一个按钮。我想要做的是继续将字段中的数据添加到dataView。
我在bean类中有一个List,private List<dataEntity> data = new ArrayList<dataEntity>
。
我有一个通过按下将数据添加到数组的按钮触发的方法,但每次添加数据时,List中的所有条目都将替换为最新的条目。
本质上,该列表包含第N个条目的N个副本
我考虑过将每个条目保存到数据库中并从中填充List,但这似乎是不合逻辑的。
过去两天这让我很难过。任何人都可以建议一些解决这个问题。我希望尽可能使用CDI bean而不是JSF Managed。
由于
答案 0 :(得分:0)
由于这里没有代码,我将不得不采取一些猜测,但我认为问题是你的@ConversationScoped
bean,或者更确切地说是对它的生命周期的理解。
除非你让对话长时间运行,否则这个范围的行为与@RequestScoped
相同 - 它会在每次请求后丢弃,并在新请求后重新创建。这意味着它内的List
将是每次都重新创建。
你想要的是让对话长时间运行,你通常用以下方式进行:
@ConversationScoped
public class YourBean {
@Inject Conversation conversation
// call this sometime within the first request
public void conversationStartingMethod() {
conversation.begin();
}
}
或者,您可以改为使用bean @SessionScoped
,这将使整个HTTP会话生效(或除非超时/无效)。