我正在使用 Primefaces 5.0 创建动态数据表。
我的 DataObject 有一些必填字段和可选“tupel”(键值对)列表。可选列表的大小可能有所不同。因此,我需要一种动态机制来显示 Primefaces.DataTable 中的 DataObject 列表。
我的方法如下:
public class DataObject {
private String staticval1;
private String staticval2;
private List<Tupel> optionalValues;
// .. getter, setter, hashCode, toString.....
}
public class Tupel{
private String id;
private String value;
}
@ManagedBean
@ViewScoped
public class TableOverviewBean {
private List<DataObject> data;
@EJB
private IMyDao myDao;
@PostConstruct
public void init() {
data = myDao.findAll();
}
public List<DataObject> getData() {
return data;
}
public void setData(List<DataObject> data) {
this.data = data;
}
}
<h:form>
<p:dataTable value="#{tableOverviewBean.data}" var="data">
<p:column headerText="static1">
<h:outputText value="#{data.staticval1}" />
</p:column>
<p:column headerText="static2">
<h:outputText value="#{data.staticval2}" />
</p:column>
<p:columns value="#{data.optionalValues}" var="opt" headerText="#{opt.id}">
<h:outputText value="#{opt.value}" />
</p:columns>
</p:dataTable>
</h:form>
但这是行不通的。不呈现动态列。
我该如何解决我的问题?
编辑:
预期结果:
staticval1 | staticval2 | dynamic_id1 | dynamic_id2 | ... | dynmic_idn
----------------------------------------------------------------------
static1a | static2a | dyna_value1a| dyna_value2a | ... | dyna_valu3a
static1b | static2b | dyna_value1b| dyna_value2b | ... | dyna_valu3b
static1c | static2c | dyna_value1c| dyna_value2c | ... | dyna_valu3c
无法根据行数据定义列。想象一下,第 1 行有 2 列,第 2 行有 6 列,第 3 行有 1 列,等等,您如何在 HTML 中生成技术上有效的表格?每行必须具有相同数量的列。
您有 2 个选择,具体取决于是否可以更改型号:
-
如果无法更改型号,则需要更换<p:columns>
由单个<p:column>
并循环#{data.optionalValues}
使用嵌套循环,例如<ui:repeat>
或者甚至是另一个<p:dataTable><p:columns>
:
<p:column>
<p:dataTable value=""><!-- Empty string as value forces 1 row. -->
<p:columns value="#{data.optionalValues}" var="opt" headerText="#{opt.id}">
#{opt.value}
</p:columns>
</p:dataTable>
</p:column>
-
如果你可以改变模型,那么你需要让<p:columns value>
指向 bean 属性而不是行属性,因此每一行都完全相同。如果您替换,这将起作用List<Tupel> optionalValues
by Map<String, Tupel> optionalValues
关键在哪里Tupel#id
并添加一个List<String>
包含所有可用的 bean 的属性Tupel#id
values.
<p:columns value="#{tableOverviewBean.availableTupelIds}" var="id" headerText="#{id}">
#{data.optionalValues[id].value}
</p:columns>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)