Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Primefaces数据表中表示嵌套数据?_Java_Jsf_Jsf 2_Datatable_Primefaces - Fatal编程技术网

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

Java 如何在Primefaces数据表中表示嵌套数据?,java,jsf,jsf-2,datatable,primefaces,Java,Jsf,Jsf 2,Datatable,Primefaces,这是我的模型: User.java public class User { //... public List<User> getFriends() { // ... } } 公共类用户{ //... 公共列表getFriends(){ // ... } } 我想建立一个用户朋友表,如下所示: users.jsf +----------+------------+ | USER | FRIENDS | +----------+----

这是我的模型:

User.java

public class User {
   //...

   public List<User> getFriends() {
      // ...
   }
}
公共类用户{
//...
公共列表getFriends(){
// ...
}
}
我想建立一个用户朋友表,如下所示:

users.jsf

+----------+------------+ | USER | FRIENDS | +----------+------------+ | | ALICE | | +------------+ | ADAM | BOB | | +------------+ | | PITT | +----------+------------+ | | | .... +----------+------------+ |用户|朋友| +----------+------------+ ||爱丽丝| | +------------+ |亚当·鲍勃| | +------------+ ||皮特| +----------+------------+ | | | .... 因为有很多用户,所以不可能一次性转储用户表

datatable组件在这种情况下非常理想,因为它具有内置分页支持。 它也很理想,因为它可以对列进行排序

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

如何构建此数据表

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

  • 。。。加上你的
编辑
以下是。

Primefaces应该满足您的需要,只是您需要对子行组件进行创新。可以使用基本面作为子行组件。它看起来像:

   <p:row expansion>
    <p:datalist value ="#{yourTableRowVar.friendslist} Var="friend">
    #{friend.firstName}
    </p:datalist>
   </p:row expansion>


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


这就是它在我的本地主机上的外观


另一个选项是在列中使用
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>
...


...
根据@Kerem的回答,我提出了以下解决方案:

为了使嵌套的数据表类似于主数据表中自己的行,我重写了CSS类
.ui-dt-c
。查看
h:head
样式标签了解详细信息

<?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>

用户和他们的朋友
.ui-dt-c{
填充:0px!重要;
}
#{u.name}
#{f.name}

对于我来说,有两种解决方案:

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

<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>

#{u.name}
#{f.name}
2-如果我可以直接处理朋友列表(listFreinds[用户名,朋友]),或者当我使用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>

#{u.userName}
#{u.friend}
第二种情况是自v6.0.11以来具有Primefaces行分组的新本机解决方案


您能用示例代码说明您的答案吗?