如何动态更改数据表的列?

时间:2011-12-14 14:31:21

标签: jsf-2 datatable primefaces

我正在使用JSF 2.0和PrimeFaces 2.2。我有一个数据表,其列需要根据下拉菜单中的选择进行更新。我不想创建多个数据表,因为下拉列表中有很多值,根据哪些列值以及数据表中的列数将显示。

是否可以这样做?

好吧,让我非常具体,假设我在下拉菜单中有10个项目,并且每个选项都有不同类型的数据表,我必须从下拉菜单中选择显示,我不想制作10种不同类型的数据表,我想要一个数据表,我可以根据我的选择选择列(数据表有很多相同的条目,因此每个数据表中都会有很多重复的条目)。

2 个答案:

答案 0 :(得分:1)

YES!让我们一起找一个方法(假设你已经为dataTable组件提供了一个默认列表):

<p:dataTable ...with various attributes... id="myTable" value="#{myBean.recordList}">
   ...and various columns...
</p:dataTable>
<h:selectOneMenu value="...">
   <f:selectItems ...your items...>
   <p:ajax event="change" listener="#{myBean.myMethod}" update="myTable" />
</h:selectOneMenu> 

myMethod将是一种更改recordList然后刷新(更新)表组件的方法。当然,你必须放置一个外部表单组件。

更新:如果你想在已经实现的dataTable中有不同的列,并根据你的选择显示/隐藏它们(BalusC答案):

<p:dataTable ...with various attributes... id="myTable" value="#{myBean.recordList}">
   <p:column rendered="#{myBean.myValue == 1}" >
      first column
   </p:column>
   <p:column rendered="#{myBean.myValue == 2}" >
      second column
   </p:column>
   <p:column rendered="#{myBean.myValue == 3}" >
      third column
   </p:column>
</p:dataTable>
<h:selectOneMenu value="#{myBean.myValue}">
   <f:selectItem itemLabel="First Column" itemValue="1" />
   <f:selectItem itemLabel="Second Column" itemValue="2" />
   <f:selectItem itemLabel="Third Column" itemValue="3" />
   <p:ajax event="change" update="myTable" />
</h:selectOneMenu> 

答案 1 :(得分:0)

相关问题