我想在commandface中按下commandButton时将数据加载到datatable。首次加载页面时,数据表必须为空,但在单击commandButton后,必须加载数据表!我能怎么做。我是主要人物的新手。
答案 0 :(得分:2)
首次加载页面时,不要初始化dataTable值。之后,您可以更新 p:dataTable
通过更新 id 。只需添加
<p:dataTable id="dataTableId" ...>
<p:commandButton update="dataTableId" ..>
到你的commandButton。此外,您需要使用
action="#{bean.addStuffToDataTable}"
或
actionListener="#{bean.addStuffToDataTable}"
作为 p:commandButton 中的属性,以便填充dataTable中的数据。在使用其中一个属性之前,请务必阅读Differences between action and actionListener。
答案 1 :(得分:2)
根据您在问题中描述的内容,这里有一个示例(这只是@Manuel所描述的一个工作示例)。由于辅助bean上的List为空,因此在初始渲染时,数据表将为空。单击命令按钮时,将触发doPopulateList()方法。然后,此方法将填充列表。最后,update属性将使数据表从辅助bean重新加载列表。这次List将填充4条记录。
<h:body>
<h:form>
<p:dataTable id="fooTable" value="#{dataTableBean.dataTableList}" var="record">
<p:column><h:outputText value="#{record}"/></p:column>
</p:dataTable>
<p:commandButton value="Populate DataTable" actionListener="#{dataTableBean.doPopulateList()}" update="fooTable"/>
</h:form>
</h:body>
DataTableSample支持bean:
@ManagedBean
@ViewScoped
public class DataTableBean implements Serializable {
List<String> dataTableList = new ArrayList<String>();
/**
* @return the dataTableList
*/
public List<String> getDataTableList() {
return dataTableList;
}
/**
* @param dataTableList the dataTableList to set
*/
public void setDataTableList(List<String> dataTableList) {
this.dataTableList = dataTableList;
}
public void doPopulateList(){
dataTableList.add("Record1");
dataTableList.add("Record2");
dataTableList.add("Record3");
dataTableList.add("Record4");
}
}