我正在使用JSF 2.0和PrimeFaces 2.2。我有一个数据表,其列需要根据下拉菜单中的选择进行更新。我不想创建多个数据表,因为下拉列表中有很多值,根据哪些列值以及数据表中的列数将显示。
是否可以这样做?
好吧,让我非常具体,假设我在下拉菜单中有10个项目,并且每个选项都有不同类型的数据表,我必须从下拉菜单中选择显示,我不想制作10种不同类型的数据表,我想要一个数据表,我可以根据我的选择选择列(数据表有很多相同的条目,因此每个数据表中都会有很多重复的条目)。
答案 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)