Подтвердить что ты не робот

Прайс-листы dataTable с rowspan

Я совершенно новый с JSF-сетями 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>

Я даю, может быть, слишком мало информации, поэтому, если вам это нужно, скажите мне:) Надеюсь, что мой вопрос ясен.

Спасибо

4b9b3361

Ответ 1

Твердое твердое тело и все гибкое решение для пользовательских сеток - это использовать < c: forEach > вместе с Primefaces < p: panelGrid > :

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

Ответ 2

так как вы указали 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>

Ответ 3

У меня была одна и та же проблема: простые (или богатые) интерфейсы предлагают rowspan только для верхнего и нижнего колонтитула.

Затем я попытался использовать компонент icefaces ace:datatable, и он запускается добавлением только одного атрибута в colum (s), который вы хотите быть "доступным для строк": ace:column: groupBy="#{bean.field}".

Вы указываете, как обычно, список строк, и этот компонент автоматически генерирует все строки в строке (я думаю, автоматически определяя значения соседних значений) в сгенерированной таблице html.

Он полностью работает с компонентами-перьями: в этот момент у меня есть производные метки в ледяных поверхностях datatable cells ant, которые ледяные поверхности, находящиеся в datatable, находятся внутри панели поверхностей.

Ответ 4

Я бы посмотрел на DataTable RichTaces. Я нашел его более гибким, чем таблица 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, которые вы добавили rendered = "# {rowKey eq 0}", также!