使用JPAContainer数据源过滤Vaadin表,用于多个并发用户

时间:2015-03-15 01:58:05

标签: filtering vaadin jpacontainer

我有一个JPAContainer,里面装有组实体(包含组名,组内用户数等属性)。我希望用户能够查看包含他们所属的所有组的列表的表。

我通过groups.addContainerFilter(new Like("users.email", user.getEmail()));来实现这一点(刚刚意识到使用他们的ID会更有意义,但这不是重点),但现在我遇到的问题是,如果有两个用户查看同时,列出的组将更改为新用户的组。

例如:

  • 玩家A正在查看他的小组
  • 玩家B去查看他的小组
  • 玩家A的视图刷新
  • 玩家A现在正在查看玩家B的小组

我觉得我错过了一个明显的解决方案。我想到只有一个单独的容器支持表,然后将组中过滤器产生的所有实体添加到表的新容器中,但这似乎效率低下。

不可能以某种方式对不同用户进行不同的JPAContainer过滤吗?

1 个答案:

答案 0 :(得分:0)

好吧,我决定采用我的第一个想法来解决问题,然后将这些组添加到支持该表的单独容器中。如果有人有更好的解决方案,我很乐意听到它。

这基本上就是我的工作方式:

BeanItemContainer<Group> tableBack = new BeanItemContainer<Group>(Group.class);
groupTable.setContainerDataSource(tableBack);
Filter loggedInFilter = GroupManager.getGroupsByUserFilter(UserManager.getLoggedInUser());
tableBack.addAll(GroupManager.applyFiltersGetResults(loggedInFilter));

applyFiltersGetResults()将过滤器数组应用于JPAContainer并返回与其匹配的所有组的列表。

编辑:这是一个糟糕的解决方案。最初我有一个静态JPAcontainer用于所有UI实例,但现在每个UI初始化一个新容器,允许过滤而不影响其他人的容器。我认为这不会让人们看到其他用户,但它工作正常。