java p:数据列表未更新
我有p:datalist
包含一组对象,还有p:commandButton
应该向这个集合添加一个对象。但无论我做什么,datalist
更新得太快,并且不包含新对象。但是当我点击2次时,datalist
被刷新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>
用户支持类
@Named
@RequestScoped
public class UserBacking {
private User user;
@Inject
private UserService userService;
(...)
public void addProject() {
userService.addProject(user);
}
}
用户服务
@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);
}
}
# 1 楼答案
尝试将
update="mydatalist"
属性添加到<p:commandButton ... />
。在支持bean中也使用@ViewScoped
而不是@RequestScoped
。每次请求时都会创建RequestScope bean,因此会丢失以前存储的数据。取而代之的是,ViewScope bean只有在根元素发生更改时才会被清除和重新创建,即UIViewRoot
@ViewScoped
支持bean应该足以管理使用ajax的页面