2011-12-14 27 views
0

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

有没有可能这样做?

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

+0

你想有不同的列在一个DataTable已经实现,显示/隐藏他们根据您的选择?或者你想根据你的选择来改变列表(dataTable值)(基本上这意味着每个选项dataTable将显示不同的记录)? – spauny 2011-12-14 15:30:04

+0

是的,我想在已经实现的dataTable中有不同的列,并根据我的选择显示/隐藏它们。 – curious 2011-12-14 15:32:40

+0

你不是很具体;我已经更新了我的答案并添加了BalusC解决方案! – spauny 2011-12-14 15:39:03

回答

1

是的!让我们一起找到一种方法(假设你提供了一个默认列表到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,然后刷新(更新)表组件。当然,你必须放置一个外部表单组件。

更新:如果您想在已经实施和显示/隐藏他们根据您的选择(BalusC答案)一个DataTable的不同列:

<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>