有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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