如何从ManagedBean填充JSF / Primefaces DataTable?

时间:2014-07-08 16:20:43

标签: jsf jsf-2 primefaces datatable managed-bean

我使用JSF2和Primefaces 5实现了我的第一个应用程序。 我希望当用户按下按钮时,我的托管bean会创建一个新的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属性绑定Columns。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

所以你想从托管bean创建一个UI组件???

也许我在这里遗漏了一些东西,但实现这一点的一种正确而简单的方法是必须使用<p:datatable>在facelet(your_page.hxtml)中声明Datatable并将其链接到包含数据的支持bean (即value="#{yourbean.yourlist}")。

启动时,您的支持bean可以为空。无论数据是否已加载,您都必须以不同方式呈现UI(请参阅数据表组件上的“呈现”标记)。

只需在必要时将数据填充到bean中(按钮/执行)。

并且不要忘记更新UI部分(请参阅操作按钮上的“更新”标记)以刷新更改的页面区域(至少数据)。

示例:

 <p:datatable id="mytable" var="child" value="#{mybean.children}" rendered="#{not empty mybean.children}"> 
 ...
 </p:datatable>
 ...
 <p:button update="mytable">
 ...