8

这是我的模型:

用户.java

public class User {
   //...

   public List<User> getFriends() {
      // ...
   }
}

我想建立一个这样的用户朋友表:

用户.jsf

+------------+------------+
| 用户 | 朋友 |
+------------+------------+
| | 爱丽丝 |
| +------------+        
| 亚当 | 鲍勃 |
| +------------+
| | 皮特 |
+------------+------------+
| | |
……

由于用户众多,不可能一次性转储用户表。

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

不幸的是,我无法通过 Primefaces 示例找到更改用户列中的行跨度的方法。

我怎样才能建立这个数据表?

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

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

4

5 回答 5

14

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

<h:column>
    <h:dataTable var="friend" value="#{user.friends}">
        <h:column>
            <h:outputText value="#{friend.name}"/>
        </h:column>
    </h:dataTable>
</h:column>

这就是它在我的本地主机上的样子

在此处输入图像描述

于 2012-11-30T22:41:54.433 回答
3

另一种选择是ui:repeat在列内使用来获取集合的所有值。

例子:

<p:dataTable var="user" value="#{userGroupBacking.users}" id="userTable">

    <p:column headerText="User">
        <h:outputText value="#{user.name}" />
    </p:column>

    <p:column headerText="Groups">
        <ui:repeat var="group" value="#{user.groups}">
            <h:outputText value="#{group.name}" /><br />
        </ui:repeat>
...
于 2013-10-16T19:20:27.050 回答
2

Primefaces可扩展行应该可以满足您的需求,只是您需要使用子行组件来发挥创意。您可以使用素面数据列表组件作为子行组件。它看起来像:

   <p:row expansion>
    <p:datalist value ="#{yourTableRowVar.friendslist} Var="friend">
    #{friend.firstName}
    </p:datalist>
   </p:row expansion>
于 2012-11-30T17:31:45.927 回答
2

对我来说有两个解决方案:

1-如果我想逐个用户浏览并检索朋友列表,在这种情况下,我更喜欢dataList

<p:dataTable value="#{users.list}" var="u">

    <p:column headerText="USER">#{u.name}</p:column>    
    <p:column headerText="FRIENDS">
        <p:dataList value="#{u.friends}" var="f">
            #{f.name}
        </p:dataTable>
    </p:column>

</p:dataTable>

2- 在我可以直接处理朋友列表(listFreinds [userName,friend])或者当我使用JPQL 查询的情况下:

<p:dataTable value="#{users.listFreinds}" var="u" sortBy="#{u.userName}">

    <p:column headerText="USER" groupRow="true">#{u.userName}</p:column>    
    <p:column headerText="FRIENDS">#{u.friend}</p:column>

</p:dataTable>

第二种情况,是自 v6.0.11 以来使用Primefaces Row Grouping的新原生解决方案

https://www.primefaces.org/showcase/ui/data/datatable/rowGroup.xhtml

于 2017-04-26T11:57:02.847 回答
2

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

为了使嵌套数据表像自己的主数据表行一样,我已经覆盖了 CSS 类.ui-dt-c。检查标签以获取详细信息h:headstyle

<?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>
于 2017-01-19T16:54:51.237 回答