p:dataList 没有更新
p:dataList not updating
我有 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>
用户支持class
@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);
}
}
尝试将 update="mydatalist"
属性添加到您的 <p:commandButton ... />
。还可以在支持 bean 中使用 @ViewScoped
而不是 @RequestScoped
。 RequestScoped bean 是在每次请求时创建的,因此会丢失以前存储的数据。 ViewScoped bean 相反仅在根元素更改时被清除并重新创建,即 UIViewRoot
。 @ViewScoped
支持 bean 应该足以管理使用 ajax.
的页面
我会说您需要在命令按钮中使用 actionListener
而不是 action
(除了您的示例中缺少的更新属性,尽管您说您正在使用它)。 action
在对服务器的正常 POST 同步请求期间占有一席之地。
此外,我的项目中的一般做法是,当在某个页面中使用 ajax 处理时,我们使用了 @ViewScoped
个 bean 而不是 RequestScoped
个。
我有 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>
用户支持class
@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);
}
}
尝试将 update="mydatalist"
属性添加到您的 <p:commandButton ... />
。还可以在支持 bean 中使用 @ViewScoped
而不是 @RequestScoped
。 RequestScoped bean 是在每次请求时创建的,因此会丢失以前存储的数据。 ViewScoped bean 相反仅在根元素更改时被清除并重新创建,即 UIViewRoot
。 @ViewScoped
支持 bean 应该足以管理使用 ajax.
我会说您需要在命令按钮中使用 actionListener
而不是 action
(除了您的示例中缺少的更新属性,尽管您说您正在使用它)。 action
在对服务器的正常 POST 同步请求期间占有一席之地。
此外,我的项目中的一般做法是,当在某个页面中使用 ajax 处理时,我们使用了 @ViewScoped
个 bean 而不是 RequestScoped
个。