p:dataList没有更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了p:dataList没有更新相关的知识,希望对你有一定的参考价值。
我有p:datalist
,其中包含一组对象和p:commandButton
,它们应该为此集合添加一个对象。但无论我做什么,datalist
都会很快更新,并且不包含新对象。但是当我点击2次时,datalist
刷新2次,并且在第一次刷新后它不包含任何新元素,但是在添加第2个第一个元素之后。如何同步此更新?我试过update="id"/"@all"
,sync / async,ajax,但它总是一样的。
页
<m:form id="lastForm">
<p:commandButton id="addProject" action="#{userBacking.addProject}" value="myadd">
</p:commandButton>
<p:dataList id="mydatalist" value="#{userBacking.user.projects.toArray()}" var="project">
#{project.projectName}, #{project.id}
</p:dataList>
</m:form>
UserBacking类
@Named
@RequestScoped
public class UserBacking {
private User user;
@Inject
private UserService userService;
(...)
public void addProject() {
userService.addProject(user);
}
}
UserService
@Stateless
public class UserService extends BaseEntityService<Long, User> {
@PersistenceContext
private EntityManager entityManager;
(...)
public void addProject(User user) {
User existingUser = get(user);
Project proj = new Project();
proj.setProjectName("projectname");
proj.setUser(existingUser);
existingUser.addProjects(proj);
super.update(existingUser);
}
}
尝试将update="mydatalist"
属性添加到您的<p:commandButton ... />
。也可以在你的支持bean中使用@ViewScoped
而不是@RequestScoped
。每次请求都会创建一个RequestScoped bean,因此会丢失先前存储的数据。只有当根元素改变即UIViewRoot
时,ViewScoped bean才会被清除并重新创建。 @ViewScoped
支持bean应该足以管理一个使用ajax的页面。
我会说你需要在你的命令按钮中使用actionListener
而不是action
(除了你的例子中缺少的更新属性,尽管你说你正在使用它)。 action
在正常POST同步请求到服务器期间占有一席之地。
此外,我的项目中的一般做法是,当在某个页面中使用ajax处理时,我们使用@ViewScoped
bean而不是RequestScoped
bean。
以上是关于p:dataList没有更新的主要内容,如果未能解决你的问题,请参考以下文章