8

これが私のモデルです:

User.java

public class User {
   //...

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

このようなユーザーの友達のテーブルを作成したいと思います:

users.jsf

+ ---------- + ------------ +
| ユーザー| フレンズ|
+ ---------- + ------------ +
| | アリス|
| + ------------ +        
| アダム| BOB |
| + ------------ +
| | PITT |
+ ---------- + ------------ +
| | |
...。

ユーザーが多いため、一度にユーザーテーブルをダンプすることはできません。

この場合、データテーブルコンポーネントは、ページネーションサポートが組み込まれているため理想的です。列を並べ替えることができるので、それも理想的です...

残念ながら、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

@Keremの回答に基づいて、私が思いついた解決策は次のとおりです。

ネストされたデータをメインデータテーブルの独自の行のようにするために、CSSクラスをオーバーライドしました.ui-dt-ch: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>
于 2017-01-19T16:54:51.237 に答える
2

私にとっては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>

2番目のケースは、v6.0.11以降のPrimefaces行グループ化を使用した新しいネイティブソリューションです。

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

于 2017-04-26T11:57:02.847 に答える