我使用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。我怎么能这样做?
答案 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">
...