如何在Primefaces数据表中表示嵌套数据?

Ste*_*han 8 java datatable jsf primefaces jsf-2

这是我的模型:

User.java

public class User {
   //...

   public List<User> getFriends() {
      // ...
   }
}
Run Code Online (Sandbox Code Playgroud)

我想构建一个用户朋友的表格,如下所示:

users.jsf

+----------+------------+
|   USER   |   FRIENDS  |
+----------+------------+
|          |    ALICE   |
|          +------------+        
|   ADAM   |    BOB     |
|          +------------+
|          |    PITT    |
+----------+------------+
|          |            |
....

由于有许多用户,因此无法一次性转储用户表.

在这种情况下,数据表组件是理想的,因为它具有内置的分页支持.它也是理想的,因为它可以对列进行排序......

不幸的是,我无法通过Primefaces示例找到更改用户列中的rowspan的方法.

我该如何构建这个数据表?

其他一些OP有类似的问题:

编辑
这是我提出的最终解决方案.

Ker*_*ğan 14

只需在列中使用另一个数据表:)

<h:column>
    <h:dataTable var="friend" value="#{user.friends}">
        <h:column>
            <h:outputText value="#{friend.name}"/>
        </h:column>
    </h:dataTable>
</h:column>
Run Code Online (Sandbox Code Playgroud)

这是它在我的localhost上的样子

在此输入图像描述


Ste*_*han 2

根据@Kerem的回答,这是我想出的解决方案:

为了使嵌套数据表像主数据表自己的行一样,我重写了 CSS 类.ui-dt-c。检查h:head标签style以了解详细信息。

<?xml version="1.0" encoding="UTF-8"?>
<html
    xmlns="http://www.w3c.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:fn="http://java.sun.com/jsp/jstl/functions"
    xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
    <title>USERS and their friends</title>
    <style>
       .ui-dt-c {
          padding: 0px !important;
       }
    </style>
</h:head>
<h:body>
<h:form id="form">
<p:dataTable
    value="#{users.list}"
    var="u">

    <p:columnGroup type="header">
        <p:row>
            <p:column headerText="USER" />
            <p:column headerText="FRIENDS" />
        </p:row>
    </p:columnGroup>

    <p:column>#{u.name}</p:column>
    <p:column>
        <p:dataTable
            value="#{u.friends}"
            var="f">
            <p:column>#{f.name}</p:column>
        </p:dataTable>
    </p:column>
</p:dataTable>
</h:form>
Run Code Online (Sandbox Code Playgroud)