我正在使用JSF 2.0和PrimeFaces 2.2。我有一个数据表,其列需要根据下拉菜单中的选择进行更新。我不想创建多个数据表,因为下拉列表中有许多值,根据哪些列值以及数据表中的列数将会显示。如何动态更改数据表的列?
有没有可能这样做?
好吧,让我非常具体的,假设我有下拉菜单中的10个项目和每个选择有不同类型的数据表,我必须从下拉菜单中选择显示,我不想做10种不同的类型数据表,我想要一个单一的数据表,我可以根据我的选择选择列(数据表有很多相同的条目,所以每个数据表中会有很多重复条目)。
我正在使用JSF 2.0和PrimeFaces 2.2。我有一个数据表,其列需要根据下拉菜单中的选择进行更新。我不想创建多个数据表,因为下拉列表中有许多值,根据哪些列值以及数据表中的列数将会显示。如何动态更改数据表的列?
有没有可能这样做?
好吧,让我非常具体的,假设我有下拉菜单中的10个项目和每个选择有不同类型的数据表,我必须从下拉菜单中选择显示,我不想做10种不同的类型数据表,我想要一个单一的数据表,我可以根据我的选择选择列(数据表有很多相同的条目,所以每个数据表中会有很多重复条目)。
是的!让我们一起找到一种方法(假设你提供了一个默认列表到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>
你想有不同的列在一个DataTable已经实现,显示/隐藏他们根据您的选择?或者你想根据你的选择来改变列表(dataTable值)(基本上这意味着每个选项dataTable将显示不同的记录)? – spauny 2011-12-14 15:30:04
是的,我想在已经实现的dataTable中有不同的列,并根据我的选择显示/隐藏它们。 – curious 2011-12-14 15:32:40
你不是很具体;我已经更新了我的答案并添加了BalusC解决方案! – spauny 2011-12-14 15:39:03