gpt4 book ai didi

jsf-2 - Primefaces 数据表中的静态和动态列

转载 作者:行者123 更新时间:2023-12-03 23:32:03 26 4
gpt4 key购买 nike

我正在使用 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,这将起作用来自 Map<String, Tupel> optionalValues key 在哪里Tupel#id并添加一个 List<String>包含所有可用的 bean 的属性 Tupel#id值。
    <p:columns value="#{tableOverviewBean.availableTupelIds}" var="id" headerText="#{id}">
    #{data.optionalValues[id].value}
    </p:columns>
  • 关于jsf-2 - Primefaces 数据表中的静态和动态列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25658034/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com