我对JSF primefaces 3.1很新。 我尝试构建一个“复杂”表,我找不到使用dataTable的好解决方案(我需要一个排序组件)。
我想构建一个等效于以下HTML表示的表,使用类似的基本POJO:
String field1
String field2
List<String> fields3 // 3 items
String field4
<table border="1">
<tr>
<td rowspan="3">col1</td>
<td rowspan="3">col2</td>
<td>col3.1</td>
<td rowspan="3">col4</td>
</tr>
<tr>
<td>col3.2</td>
</tr>
<tr>
<td>col3.3</td>
</tr>
</table>
我给的信息太少,所以如果你需要,请告诉我:) 我希望我的问题很明确。
谢谢
答案 0 :(得分:1)
因为您在代码中提到了primefaces
。
我建议你使用p:panelGrid
<p:panelGrid>
<p:row>
<p:column rowspan="3"/>
<p:column rowspan="3"/>
<p:column rowspan="1"/>
<p:column rowspan="3"/>
</p:row>
<p:row>
<p:column/>
</p:row>
<p:row>
<p:column/>
</p:row>
</p:panelGrid>
答案 1 :(得分:1)
我遇到了同样的问题:primefaces(或richfaces)仅为页眉和页脚提供rowspan。
然后我尝试使用icefaces ace:datatable
组件,并通过在列中添加一个您希望成为“rowspanable”的属性来运行:ace:column
:groupBy="#{bean.field}"
。
你像往常一样给出一个行列表,这个组件会在生成的html表中自动生成所有行数(我想通过自动检测等值的neigbourhood)。
它与primefaces组件一起运行:此时我在icefaces数据表单元格中有primefaces outputlabel,这个icefaces数据表位于primefaces面板内。
答案 2 :(得分:1)
定制网格的坚如磐石且灵活的解决方案是使用&lt; c:forEach&gt;与Primefaces&lt; p:panelGrid&gt;:
一起使用<html ... xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui">
<p:panelGrid>
<p:row>
<p:column styleClass="ui-state-default" colspan="2"><!-- header -->
<h:outputText value="Some Header"/>
</p:column>
...
</p:row>
<p:row><!-- other header row -->
...
</p:row>
<c:forEach items="#{list}" var="element">
<p:row>
<p:column styleClass="ui-state-default" rowspan="#{list.sublist.someSizeExpression}"><!-- left rowspan -->
<h:outputText value="#{element.name}"/>
</p:column>
<c:forEach items="#{element.sublist}" var="subelement">
<p:column>
<h:selectBooleanCheckbox/>
</p:column>
</c:forEach>
</p:row>
</c:forEach>
</p:panelGrid>
</html>
它看起来不错,Command-Buttons和AJAX在Head和Cells中均可用。
答案 3 :(得分:0)
我会看一下RichFaces dataTable。我发现它比PrimeFaces表更灵活,适用于复杂的布局。
您可以使用
<rich:collapsibleSubTable
value="#{bean.getData()}"
var="line"
id="subTable"
rowKeyVar="rowKey"
width="100%">
<rich:column width="40" rendered="#{rowKey eq 0}" rowspan="#{line.firstColRowSpan}">
#{line.country}
</rich:column>
<rich:column rendered="#{line.index eq 0}" rowspan="#{line.secondColRowSpan}">
#{line.state}
</rich:column>
<rich:column>
#{line.city}
</rich:column>
</rich:subtable>
所以,如果您的行数据如下所示:
US CA San Francisco 0 (index) 6 (firstColRowSpan) 3 (secondColRowSpan)
US CA LA 1 6 3
US CA Jose 2 6 3
US TX Huston 0 6 2
US TX Dallas 1 6 2
US AZ Phoenix 0 6 1
UK Surrey Guildford 0 1 1
表格会显示
US CA San Francisco
LA
Jose
TX Huston
Dallas
AZ Phoenix
UK Surrey Guildford
重要的是,如果您在其中一个rowspan列中有按钮/链接等,则添加一个render =&#34;#{rowKey eq 0}&#34;还有!