p:dataList没有更新

问题描述 投票:1回答:2

我有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);
    }
}
java primefaces ejb
2个回答
0
投票

尝试将update="mydatalist"属性添加到您的<p:commandButton ... />。也可以在你的支持bean中使用@ViewScoped而不是@RequestScoped。每次请求都会创建一个RequestScoped bean,因此会丢失先前存储的数据。只有当根元素改变即UIViewRoot时,ViewScoped bean才会被清除并重新创建。 @ViewScoped支持bean应该足以管理一个使用ajax的页面。


1
投票

我会说你需要在你的命令按钮中使用actionListener而不是action(除了你的例子中缺少的更新属性,尽管你说你正在使用它)。 action在正常POST同步请求到服务器期间占有一席之地。

此外,我的项目中的一般做法是,当在某个页面中使用ajax处理时,我们使用@ViewScoped bean而不是RequestScoped bean。

© www.soinside.com 2019 - 2024. All rights reserved.