Как заполнить JSF / Primefaces DataTable из ManagedBean?

Я создаю свое первое приложение, использующее JSF2 и Primefaces 5. Я хочу, чтобы, когда пользователь нажимает кнопку, мой управляемый компонент создает новый DataTable и заполняет его некоторыми данными. Как я могу сделать это из моего управляемого bean-компонента? Это часть кода моего управляемого bean-компонента.

...
//This is the managed bean's method executed when the user presses the button.  
public void execute() {
    ...
    //Get the data from database and put the entries in a list of java beans called myList.
    //Here I create a ListDataModel to convert myList in a DataModel to pass to the datatable
    ListDataModel<myJavaBean> tableData = new ListDataModel<myJavaBean>(myList);
    //Then I create a new datatable..
    DataTable dataTable = new DataTable();
    //.. and I set the data
    dataTable.setValue(tableData);
    //I define the columns
    Column idColumn = new Column();
    idColumn.setHeaderText("id");
    Column dateColumn = new Column();
    dateColumn.setHeaderText("date");
    Column timeColumn = new Column();
    timeColumn.setHeaderText("time");
    Column stateColumn = new Column();
    stateColumn.setHeaderText("state");
    //Here I add the columns to the table
    dataTable.getChildren().add(idColumn);
    dataTable.getChildren().add(dateColumn);
    dataTable.getChildren().add(timeColumn);
    dataTable.getChildren().add(stateColumn);
    ...         

Когда я нажимаю кнопку, эта часть кода создает новый DataTable с правильным количеством столбцов и правильным заголовком. Также номер строки правильный, но строка полностью пуста, я полагаю, это связано с тем, что я не привязал столбцы к соответствующим свойствам java bean-компонента списка. Как я могу это сделать?


person user2572526    schedule 08.07.2014    source источник


Ответы (1)


Итак, вы хотите создать компонент пользовательского интерфейса из управляемого bean-компонента ???

Возможно, мне здесь чего-то не хватает, но правильный и более простой способ добиться этого - объявить Datatable в facelet (your_page.hxtml) с помощью <p:datatable> и связать его с компонентом поддержки, содержащим данные (т.е. value="#{yourbean.yourlist}").

При запуске ваш компонент поддержки может быть пустым. Вам просто нужно визуализировать пользовательский интерфейс по-разному, независимо от того, загружены ваши данные или нет (см. Тег «rendered» в компоненте datatable).

Просто введите данные в bean-компонент, когда вам нужно это сделать (кнопка / выполнить).

И не забудьте обновить части пользовательского интерфейса (см. Тег «обновить» на кнопке действия), чтобы обновить измененные области страницы (по крайней мере, с указанием данных).

пример:

 <p:datatable id="mytable" var="child" value="#{mybean.children}" rendered="#{not empty mybean.children}"> 
 ...
 </p:datatable>
 ...
 <p:button update="mytable">
 ...
person Stephane Lallemagne    schedule 08.07.2014
comment
Привет, Стефан, с твоим предложением он отлично работает! И код намного чище, чем тот, который я написал. Большое спасибо! - person user2572526; 09.07.2014