Как обновить таблицу данных, чтобы получить новый список из базы данных

У меня есть 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

По сути, когда я выбираю группу, в таблице данных пользователя будут отображаться пользователи НЕ в отделе.

Вот мой код 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}.

Мои вопросы: как мне автоматизировать эту функцию? Я хотел бы обновить список и показать следующий вывод в моем примере. Это вообще возможно??

Я использую простые лица, jsf и java.


person ShaunK    schedule 30.11.2011    source источник
comment
Я не понял: вы хотите, чтобы были показаны пользователи, которые были связаны с отделом, или нет? Как я понимаю, пользователей, которые уже из отдела, там показывать нельзя! Пожалуйста, объясни.   -  person spauny    schedule 30.11.2011
comment
Хорошо, пользователи, которые находятся в отделе, не отображаются в таблице пользователей, но они будут отображаться при выборе новой группы. У меня есть отношение «многие ко многим» с пользователем и группами с UserGroups в качестве ассоциативного объекта между ними. Таким образом, при выборе новой группы снова будет получен новый список пользователей. Происходит следующее (Менеджмент, Том), (HR, Том)   -  person ShaunK    schedule 30.11.2011


Ответы (1)


Я не думаю, что использование dataTables для таких вещей является хорошей практикой/простой практикой. На мой взгляд, лучше реализовать компонент selectOneMenu (с ленивой загрузкой списков) для каждого списка (отдел, сотрудники) и, конечно же, немного CSS, чтобы выглядело хорошо и "воздушно"...

Или даже PickList, это лучший выбор...

РЕДАКТИРОВАТЬ: Хорошо, тогда нам придется работать с таблицами: Тем не менее, я не вижу, где трудная часть... (are you using JDBC or a DAO framework like Hibernate,JPA?) для каждого выбранного отдела (строка из html-таблицы отдела) вам придется запрашивать базу данных ( или транзакционная таблица, которая содержит всех пользователей с их отделами — конечно, ключи FK) и выберите всех пользователей из этого отдела или пользователей без отдела. Итак, у вас будет компонент ajax с event="select". Вам нужно будет выполнить этот запрос для каждого выбранного отдела хотя бы один раз, а затем кэшировать результат до тех пор, пока новый пользователь не будет добавлен в отдел (затем вам нужно обновить кэшированные данные, выполнив другие запросы).

Скажите, правильно ли я думаю...

person spauny    schedule 30.11.2011
comment
Я бы хотел измениться, но не могу. Это требование, с которым я должен придерживаться: / - person ShaunK; 30.11.2011
comment
Я использую JDBC. Да, ты прав. Но как бы вы это сделали? как будет работать кеш? Прошу прощения, я новичок в веб-разработке. @spauny - person ShaunK; 30.11.2011