Java 如何在Primefaces数据表中表示嵌套数据?
这是我的模型: User.javaJava 如何在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 | +----------+----
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行分组的新本机解决方案
您能用示例代码说明您的答案吗?