【问题标题】:How to get columns list from datatable var object in primefaces? [duplicate]如何从primefaces中的数据表var对象获取列列表? [复制]
【发布时间】:2026-02-23 19:10:01
【问题描述】:

我有一个这样的数据表:

<p:dataTable id="datatableid" value="#{manageBean.employeeList}" var="employeeObj" >
                        <p:column  style="width:10%;font-weight:bold">
                            <h:outputText value="#{employeeObj.firstName}-#{employeeObj.orgEmployeeId}"/>
                        </p:column>

                        <p:columns value="#{manageBean.fetchDataList(employeeObj)}"  var="dataObj">
                            <h:outputText value="#{dataObj.status}"/>
                        </p:columns>

                    </p:dataTable>

我的豆子是:

public List<Attendance> fetchDataList(Employee empObj)
        {
            System.out.println("**** Inside fectch attendance data **** "+empObj.getName());
            List<Attendance> attendanceList = new ArrayList<Attendance>();
            return attendanceList;
        }

在运行时,在 syso 中我得到空指针异常,因为 empObj 给出了空值。

如何获得 empObj 对象的准确值?

将数据表变量(var)作为参数传递给我用作列中的值的 fetchDataList 方法的正确方法是什么?

【问题讨论】:

  • 我之前没有测试建议,但尝试将value="#{manageBean.fetchDataList(employeeObj)}"更改为value="#{manageBean.fetchDataList(#{employeeObj})}";如果不起作用,请将Employee empObj 更改为Object empObj
  • 您尝试以错误的方式使用columns 标签。请参阅 PrimeFaces 展示,了解如何使用它。
  • 这里有一个重大的概念错误。一个表的每行不能有不同的列。列将在每个表的基础上定义。

标签: jsf-2 primefaces datatable


【解决方案1】:

感谢 cmets 伙计们。我自己解决了这个问题。

我为列标签创建了一个新列表,并在 Employee pojo 中创建了 MAP,并使用该 MAP,传递了键并获得了值。

<p:dataTable id="datatableid" value="#{manageBean.employeeList}" var="employeeObj" >
                        <p:column  style="width:10%;font-weight:bold">
                            <h:outputText value="#{employeeObj.firstName}-#{employeeObj.orgEmployeeId}"/>
                        </p:column>

                        <p:columns value="#{manageBean.newList}"  var="dataObj">
                            <h:outputText value="#{employeeObj.getMap().get(dataObj.status)}"/>
                        </p:columns>

                    </p:dataTable>

【讨论】: