2011-11-30 62 views
1

我有3个表,用户,用户组和组。我希望实现以下功能:当我在我的组数据表中选择一个不同的组时,用户数据表将刷新并更新用户列表。如何刷新数据表以从数据库检索新列表

例如, -

Groups 

1. Management 
2. HR 
3. Support 

User 

1. John 
2. Tom 
3. Mary 

我从组中选择管理,我从用户选择约翰,并将它们添加到群组出现以下情况:

Groups 

1. Management 
2. HR 
3. Support 

User 

2. Tom 
3. Mary 

UserGroups 

Management, John 

我重复这个过程汤姆添加到管理:

1. Management 
2. HR 
3. Support 

    User 

3. Mary 

UserGroups 

Management, John 
Management, Tom 

现在,当我选择一个新的组,HR,用户表刷新:

1. Management 
2. HR 
3. Support 

用户

1. John 
2. Tom 
3. Mary 

UserGroups 

Management, John 
Management, Tom 

基本上,当我选择一个组,在用户数据表将显示用户在NOT部。

这里是我的JSF代码:

<p:dataTable var="users" value="#{usuariousGruposBean.listOfUsuarios}" selection="#{users}" selectionMode="single"> 

    <p:column headerText="" style="height:0" rendered ="false"> 
    <h:outputText value="#{users.id_usuario}"/> 
    </p:column> 

    <p:column headerText="Usuarios" style="height:50"> 
    <h:outputText value="#{users.nome}"/> 
    </p:column> 

    <p:column> 
    <h:commandLink value ="selection" action="#{usuariousGruposBean.selectionOfUserObject}" > 
    <f:setPropertyActionListener target="#{usuariousGruposBean.user}" value="#{users}"/> 
    </h:commandLink> 
    </p:column> 


</p:dataTable> 

我现在有从我的数据库中检索用户的列表两种方法:

public List<Usuarious> getListOfUsuarios() throws DAOExceptions { 
     List<Usuarious> usuariosList = userDAO.list(); 
     listOfUsuarios = usuariosList; 
     return listOfUsuarios; 
    } 

    public List<Usuarious> getNewListUsers() throws DAOExceptions { 
     if(listOfUsuarios ==null) { 
     List<Usuarious> userList =userDAO.listAll(); 
     refreshListUsuarios = userList; 
     } 
     return refreshListUsuarios; 
    } 

我想刷新我{usuariousGruposBean.listOfUsuarios}。只有当我手动交换listOfUsuarios,{usuariousGruposBean.refreshListUsuarios}时,才可以刷新我的用户数据表中的用户列表。

我的问题是..如何自动执行此功能?我希望刷新列表,并在我的示例中显示以下输出。这甚至有可能吗?

我正在使用primefaces,jsf和java。

+0

我不明白:你想已经有部门相关的用户显示,或不?我看到它的方式,已经来自部门的用户不应该在那里显示!请解释。 – spauny

+0

好吧,部门中的用户不会显示在用户表中,但会在选中新组时显示。我与具有UserGroups的用户和组具有多对多关系作为两者之间的关联实体。所以,当选择一个新的组时,将再次检索一个新的用户列表。发生以下情况(管理,汤姆),(人力资源,汤姆) – ShaunK

回答

0

我不认为使用dataTables这些类型的东西是一个很好的做法/简单的做法。我看到它的方式,最好为每个列表(部门,员工)实现一个selectOneMenu组件(部门,员工),当然还有一些CSS,看起来不错,很“通风”......

甚至领料单,这是一个更好的选秀...

编辑: 好吧,那么我们将不得不与表工作:不过,我没有看到困难的部分是...(are you using JDBC or a DAO framework like Hibernate,JPA?)为每个所选部门(来自部门html表的行),您将不得不查询数据库(或包含所有用户及其部门的交易表 - 当然是FK键),并选择该部门的所有用户或没有部门的用户。因此,您将拥有一个包含event="select"的ajax组件。您必须至少对每个选定部门执行一次此查询,然后缓存结果,直到将新用户添加到部门中(然后您必须通过执行其他查询来刷新缓存数据)。

告诉我,如果我的思维方式是正确的......

+0

我希望我可以改变,但我不能。这是我必须坚持:/ – ShaunK

+0

@ShaunK答案更新。 – spauny

+0

我正在使用JDBC。是的,你是对的。但你会怎么做呢?缓存如何工作?我很抱歉,我是网络开发新手。 @spauny – ShaunK