使用rowspan来表示dataTable

时间:2012-10-30 12:57:19

标签: html jsf primefaces

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

我给的信息太少,所以如果你需要,请告诉我:) 我希望我的问题很明确。

谢谢

4 个答案:

答案 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:columngroupBy="#{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;还有!