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!
warley
Fevereiro 5, 2010, 11:39am
#3
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!
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!