[RESOLVIDO] Repeat/Columns/forEach em rich datatable dinâmico

Olá pessoal, blz? Seguinte, estou montando uma ric:datatable dinâmica aqui e estou tendo problemas com umas colunas dinâmicas. Minha tabela tem cabeçalho e linhas dinâmicas. O cabeçalho já consegui fazer, sem problemas mas, estou tendo problemas ao preencher as linhas. As mesmas simplesmente não estão renderizando (sem nenhum erro). A estrutura de minha tabela é essa:

<rich:dataTable binding="#{bean.tabela}" value="#{bean.lista}" var="item>
    <rich:column id="colMes#{item.mes}">
        <h:outputText value="#{item.mes}"/>
    </rich:column>

    <a4j:repeat value="#{item.lista}" var="item2">
        <rich:column>
            <h:inputText value="#{item2.valor1}"/>
        </rich:column>

        <rich:column>
            <h:inputText value="#{item2.valor2}" />
        </rich:column>                                                
    </a4j:repeat>
</rich:dataTable>

Dei uma ‘enxugada’ na tabela e deixei o essencial. Mas tipo, já testei com rich:columns, c:forEach (jstl), ui:repeat, a4j:repeat e nada de renderizar as colunas de valores. Ela somente renderiza a coluna do mês. Ah, estou usando RichFaces 3.3.2 SR1.

E aí, alguma luz? Valeu!

Paz e bem!

Pessoal, resolvido! Pesquisando aqui com um colega meu, vi que o rich:dataTable não funciona com os ‘repeats’ fora de um rich:column. Daí, depois de muito quebrar a cabeça, simplesmente substituímos o rich:dataTable por rich:dataGrid e pronto! Funfou que foi uma beleza! :lol: Então, o código ficou assim:

<rich:dataGrid binding="#{bean.tabela}" value="#{bean.lista}" var="item>
    <rich:column id="colMes#{item.mes}">
        <h:outputText value="#{item.mes}"/>
    </rich:column>

    <a4j:repeat value="#{item.lista}" var="item2">
        <rich:column>
            <h:inputText value="#{item2.valor1}"/>
        </rich:column>

        <rich:column>
            <h:inputText value="#{item2.valor2}" />
        </rich:column>                                                
    </a4j:repeat>
</rich:dataGrid>

Valeu!

Cara…

Eu fiz isto com a tag rich:subTable, que já é uma tag que já compõe o rich:dataTable. Ficou bem legal e é bem fácil de usar e você pode colocar as linhas de subtotais. Recomendo! :smiley:

Veja

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:rich="http://richfaces.org/rich">
            
                <rich:dataTable 
                    onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
                    onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
                    cellpadding="0" cellspacing="0" 
                    width="700" border="0" var="record" value="#{report.expReport.records}">
                
                    <f:facet name="header">
                        <rich:columnGroup>
                            <rich:column rowspan="2">
                                <rich:spacer />
                            </rich:column>
                            <rich:column colspan="3">
                                <h:outputText value="Expenses" />
                            </rich:column>
                            <rich:column rowspan="2">
                                <h:outputText value="subtotals" />
                            </rich:column>
                            <rich:column breakBefore="true">
                                <h:outputText value="Meals" />
                            </rich:column>
                            <rich:column>
                                <h:outputText value="Hotels" />
                            </rich:column>
                            <rich:column>
                                <h:outputText value="Transport" />
                            </rich:column>
                        </rich:columnGroup>
                    </f:facet>
    
                    <rich:column  colspan="5">
                    <h:outputText value="#{record.city}" /></rich:column>
                    
                    
                    <rich:subTable
                        onRowMouseOver="this.style.backgroundColor='#F8F8F8'"
                        onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
                        var="expense" value="#{record.items}">
                        <rich:column>
                            <h:outputText value="#{expense.day}"></h:outputText>
                            <f:facet name="footer">
                                <rich:spacer />
                            </f:facet>
                        </rich:column>
                        <rich:column>
                            <h:outputText value="#{expense.meals}"><f:convertNumber   pattern="$####.00"  /></h:outputText>
                            <f:facet name="footer">
                                <h:outputText value="#{record.totalMeals}"><f:convertNumber  pattern="$####.00" /></h:outputText>
                            </f:facet>
                        </rich:column>
                        <rich:column>
                            <h:outputText value="#{expense.hotels}"><f:convertNumber  pattern="$####.00"  /></h:outputText>
                            <f:facet name="footer">
                                <h:outputText value="#{record.totalHotels}"><f:convertNumber   pattern="$####.00"  /></h:outputText>
                            </f:facet>
                        </rich:column>
                        <rich:column>
                            <h:outputText value="#{expense.transport}"><f:convertNumber   pattern="$####.00"  /></h:outputText>
                            <f:facet name="footer">
                                <h:outputText value="#{record.totalTransport}"><f:convertNumber   pattern="$####.00"  /></h:outputText>
                            </f:facet>
                        </rich:column>
                        <rich:column>
                            <rich:spacer></rich:spacer>
                            <f:facet name="footer">
                                <h:outputText value="#{record.total}"><f:convertNumber   pattern="$####.00"    /></h:outputText>
                            </f:facet>
                        </rich:column>                  
                        
                    </rich:subTable>
        
                    <f:facet name="footer">
                
                        <rich:columnGroup>
                            <rich:column>Totals</rich:column>
                            <rich:column>
                                <h:outputText value="#{report.expReport.totalMeals}"><f:convertNumber   pattern="$####.00"  /></h:outputText>
                            </rich:column>
                            <rich:column>
                                <h:outputText value="#{report.expReport.totalHotels}"><f:convertNumber   pattern="$####.00"  /></h:outputText>
                            </rich:column>
                            <rich:column>
                                <h:outputText value="#{report.expReport.totalTransport}"><f:convertNumber   pattern="$####.00"  /></h:outputText>
                            </rich:column>
                            <rich:column>
                                <h:outputText value="#{report.expReport.grandTotal}"><f:convertNumber   pattern="$####.00"  /></h:outputText>
                            </rich:column>
                        </rich:columnGroup>
                    </f:facet>
        
                </rich:dataTable>

</ui:composition>

Abraço.

Eu usei o subTable também mas, a coluna mês deve estar fora do subTable. Se eu substituo o a4j:repeat pelo subTable ele cria o subTable abaixo do mês, sacou? Daí ‘encavala’ tudo.

Paz e bem!

E como você colocou um cabeçalho em um datagrid? Usei o facet e não funcionou!

O cabeçalho, como é dinâmico também, montei no Managed Bean. Tipo assim:

meuDataGrid.setHeader(cabecalho);

Onde o cabeçalho é um HtmlColumnGroup. Daí, dentro do HtmlColumnGroup, adiciono os HtmlColumns da vida. Está aí o resultado.

Paz e bem!


Desculpe a ignorância… mas como você linkou esse codigo do bean na tag <rich:datagrid ?

Eu fiz um binding no DataGrid. Daí no componente do ManagedBean eu adicionei o cabeçalho.

Paz e bem!

Seguinte queria que uma das minhas colunas da tabela fosse uma lista, estou tentando fazer com o subtable mas não estou conseguindo, será que alguem poderia me ajudar?

		<rich:dataTable value="#{generalBean.listGeneral}" var="dt" rows="20"
			 align="center" style="text-align: center;" id="tbGeral" width="100%">
				<f:facet name="header">
				
					<rich:columnGroup>
						<rich:column colspan="6">
							<h:outputText value="Geral" />
						</rich:column>
						
						<rich:column breakBefore="true" id="columnImp">
							<h:outputText value="Importação" />
						</rich:column>
						
						<rich:column id="ColumnConc">
							<h:outputText value="Conclusão" />
						</rich:column>
						
						<rich:column id="ColumnAprovada">
							<h:outputText value="Aprovada" />
						</rich:column>
					
						<rich:column id="ColumnEmerg">
							<h:outputText value="Emergencial" />
						</rich:column>
						
						<rich:column id="ColumnAprovarOs">
							<h:outputText value="Aprovar OS" />
						</rich:column>
						
						<rich:column id="ColumnControles">
							<h:outputText value="Controles" />
						</rich:column>
						
					</rich:columnGroup>
				</f:facet>

					<rich:column colspan="1">
						<rich:subTable value="#{dt.statusDownloads}" var="dt2">
							<rich:column>
								<h:outputText value="#{dt2.status}" />
							</rich:column>
						</rich:subTable>
					</rich:column>

					<rich:column>
						<h:outputText value="#{dt.statusConcl}" />
				</rich:column>
			
				<rich:column>
						<h:outputText value="#{dt.statusAprv}" />
				</rich:column>
				
					<rich:column>
						<h:outputText value="#{dt.statusAbastece}" />
				</rich:column>
			
				<rich:column>
						<h:outputText value="#{dt.statusServico}" />
				</rich:column>
			
				<rich:column>
					<a4j:commandLink ajaxSingle="true" id="clonelink" oncomplete="Richfaces.showModalPanel('pnlEditarGeral')">
                        <h:graphicImage value="/images/editar.png" style="border:0"/>
                     </a4j:commandLink>
                    <rich:toolTip for="clonelink" value="Clonar" />
                    <rich:spacer width="5"/>
                    
                    <a4j:commandLink ajaxSingle="true" id="deletelink" oncomplete="Richfaces.showModalPanel('deletePanel')">
                        <h:graphicImage value="/images/delete.png" style="border:0" />
                    </a4j:commandLink>
                    <rich:toolTip for="deletelink" value="Excluir" />
                    <rich:spacer width="5"/>
                    
                    <a4j:commandLink ajaxSingle="true" id="novolink" oncomplete="Richfaces.showModalPanel('pnlIncluirGeral')">
                        <h:graphicImage value="/images/mais.png" style="border:0" />
                    </a4j:commandLink>
                    <rich:toolTip for="novolink" value="Novo" />
                    <rich:spacer width="5"/>
                 </rich:column>
                 
				<f:facet name="footer">
				<rich:datascroller id="ds" renderIfSinglePage="false"/>			
				</f:facet>
			</rich:dataTable>


Olá Felipe, blz? Não entendi direito a sua dúvida… Qual coluna que vc quer que seja uma “lista”?Como assim lista? Um combo?

Paz e bem!