olá pessoal estou com problema na navegação com tabelas no richfaces, é o seguinte:
Tenho uma tela que usa 2 combos ligados para renderizar uma tabela com itens e com um link na ultima colula que redireciona para dados relacionados aquela linha selecionada, até ai beleza. Porém em outro link tambem uso a mesma estrura para listar esta tabela mas com uma colima que faz calculos da linha selecionada. Por ser a mesma estrutura copiei e colei os códigos modificando os Id da tablea e das colunas, mas agora quando saio da listagem da segunda tabela para o link da primeira listagem (original) acontece o seguinte erro:
duplicate Id for a component lstCrudOS:tabelaOS:j_id30
e quando saio da pagina da primeira listagem para pagina da segunda: ele mistura os dados das tabelas. segue os dados das duas paginas :
Abaixo listarei o centeúdo do body das duas páginas:
Pagina de listagem Original:
<ui:composition template="./administracao.xhtml">
<ui:define name="conteudo">
<a4j:outputPanel rendered="#{Autenticacao.usuario.nivel == 1 || Autenticacao.usuario.nivel == 2 || Autenticacao.usuario.nivel == 3}">
<h1 class="titulo">Ordens de Serviço</h1>
<a4j:form id="lstCrudOS">
<h:panelGrid>
<a4j:commandLink styleClass="button" ajaxSingle="true" action="#{ManterOS.limparDados}" oncomplete="javascript:Richfaces.showModalPanel('panelNovaOS');">
Nova OS
</a4j:commandLink>
</h:panelGrid>
<br />
<!-- Mensagem de "loading" -->
<a4j:status id="loading" startText="Carregando..." styleClass="loading" startStyleClass="loading"/>
<!-- Alertas -->
<!-- mensagens: informações, alertas e erros -->
<rich:messages errorClass="alerta1" warnClass="alerta2" infoClass="alerta3" tooltip="true" showDetail="false"/>
<!-- combos -->
<div class="linha">
<a4j:outputPanel id="painelCombos">
<h:outputLabel for="comboContrato" value="Contrato: " title="Contrato" style="width:300px; display:block; float:left; margin-left: 5px; font-weight: bold;"/>
<h:outputLabel for="comboASC" value="Acordo de Serviço:" title="Acordo de Serviço" style="width:300px; display:block; float:left; margin-left: 5px; font-weight: bold;"/>
<br />
<h:selectOneMenu id="comboContrato" value="#{ManterASC.asc.numContratCff}" style="width:300px;" required="true" requiredMessage="* 'Contrato' não selecionado.">
<f:selectItem itemLabel="-- Selecione um contrato --" itemValue=""/>
<f:selectItems value="#{ManterContrato.listarParaCombo}"/>
<a4j:support event="onchange" reRender="lstCrudOS" ajaxSingle="true"/>
</h:selectOneMenu>
<h:selectOneMenu id="comboASC" value="#{ManterOS.os.numAsc}" style="width:300px;" required="true" requiredMessage="* 'Acordo de Serviço' não selecionado.">
<f:selectItem itemLabel="-- Selecione um Acordo Serviço --" itemValue=""/>
<f:selectItems value="#{ManterASC.listarParaCombo}"/>
<a4j:support event="onchange" reRender="lstCrudOS" ajaxSingle="true"/>
</h:selectOneMenu>
</a4j:outputPanel>
</div>
<!-- Tabela com a listagem de todos as ordens de Serviço -->
<div class="alignCenter">
<rich:dataTable styleClass="tableList" id="tabelaOS" value="#{ManterOS.listar}" var="os" binding="#{ManterOS.table}">
<f:facet name="header">
<rich:columnGroup>
<rich:column width="70px">
<h:outputText value="Número OS"/>
</rich:column>
<rich:column width="90px">
<h:outputText value="Data de Abertura"/>
</rich:column>
<rich:column width="90px">
<h:outputText value="Data de Entrega"/>
</rich:column>
<rich:column>
<h:outputText value="Tamanho PF"/>
</rich:column>
<rich:column width="200px">
<h:outputText value="Observação"/>
</rich:column>
<rich:column width="140px">
<h:outputText value="Status"/>
</rich:column>
<rich:column width="50px">
<h:outputText value="Ações"/>
</rich:column>
<rich:column width="80px">
<h:outputText value="Serviços"/>
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column id="outPutNumeroOS" styleClass="alignCenter">
<h:outputText value="#{os.numeroOs}" />
</rich:column>
<rich:column id="outPutDataAbertura" styleClass="alignCenter">
<h:outputText value="#{os.dataAberturaOs}">
<f:convertDateTime pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo"/>
</h:outputText>
</rich:column>
<rich:column id="outPutDataEntrega" styleClass="alignCenter">
<h:outputText value="#{os.dataEntregaOs}">
<f:convertDateTime pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo"/>
</h:outputText>
</rich:column>
<rich:column id="outPutTamanhoPF" styleClass="alignCenter">
<h:outputText value="#{os.tamanhoPfOs}">
<f:convertNumber pattern="#,##0.00"/>
</h:outputText>
</rich:column>
<rich:column id="outPutObs" styleClass="alignLeft">
<h:outputText value="#{os.obsOs}" />
</rich:column>
<rich:column id="nivelStatus" styleClass="alignCenter">
<h:outputText value="Aberto" id="nivel0" rendered="#{os.statusOs == 0}"/>
<h:outputText value="Cancelado" id="nivel1" rendered="#{os.statu0s == 1}"/>
<h:outputText value="Fechado" id="nivel2" rendered="#{os.statusOs == 2}"/>
</rich:column>
<rich:column styleClass="alignCenter">
<a4j:commandLink ajaxSingle="true" id="editlink" reRender="lstCrudOS" action="#{ManterOS.editarOS}" oncomplete="javascript:Richfaces.showModalPanel('panelEditarOS');" >
<h:graphicImage value="/images/editar.gif"/><rich:toolTip for="editlink" value="Editar" />
</a4j:commandLink>
<a4j:commandLink ajaxSingle="true" id="deletelink" reRender="lstCrudOS" action="#{ManterOS.excluir}" onclick="if (!confirm('Deseja realmente excluir?')) return false">
<h:graphicImage value="/images/excluir.gif"/><rich:toolTip for="deletelink" value="Deletar" />
</a4j:commandLink>
</rich:column>
<rich:column title="Listar Serviços" styleClass="alignCenter">
<rich:menuItem id="listarServico" styleClass="alignCenter" action="listaServico" icon="/images/file.gif" immediate="true" >
<f:setPropertyActionListener value="#{os.numeroOs}" target="#{ManterServico.servico.numeroOs}"/>
<f:setPropertyActionListener value="#{os.dataAberturaOs}" target="#{ManterServico.servico.dataAberturaOs}"/>
</rich:menuItem>
</rich:column>
</rich:dataTable>
</div>
</a4j:form>
<!-- Modal Painel Editar -->
<a4j:include id="painelEditar" viewId="painelEditarOS.xhtml" ajaxRendered="true"/>
<!-- Modal Painel Novo -->
<a4j:include id="painelNovo" viewId="painelNovaOS.xhtml" ajaxRendered="true"/>
</a4j:outputPanel>
<a4j:outputPanel rendered="#{Autenticacao.usuario.nivel != 1 and Autenticacao.usuario.nivel != 2 and Autenticacao.usuario.nivel != 3}">
<h1 id="titulo">Atenção</h1>
<br />
<p>Essa é um área administrativa. Você não tem permissão de acesso!</p>
</a4j:outputPanel>
</ui:define>
</ui:composition>
Código da pagina de listagem copiada:
<ui:composition template="/template.xhtml">
<ui:define name="conteudo">
<a4j:outputPanel rendered="#{Autenticacao.usuario.nivel == 1 || Autenticacao.usuario.nivel == 2 || Autenticacao.usuario.nivel == 3}">
<a4j:form id="frmRelatorioGeralRelatorioSinteticoOS" >
<!-- Mensagem de "loading" -->
<a4j:status id="loadingRelatorioSinteticoOS" startText="Carregando..." styleClass="loading" startStyleClass="loading"/>
<h1 class="titulo">Relatório Individual de Ordem de Serviço</h1>
<div class="linha">
<h:outputLabel for="comboContratoRelatorioSinteticoOS" value="Contrato: " title="Contrato" style="width:300px; display:block; float:left; margin-left: 5px; font-weight: bold;"/>
<h:outputLabel for="comboASCRelatorioSinteticoOS" value="Acordo de Serviço: " title="Acordo de Serviço" style="width:300px; display:block; float:left; margin-left: 5px; font-weight: bold;"/><br />
<h:selectOneMenu id="comboContratoRelatorioSinteticoOS" styleClass="combo" style="width:300px;" value="#{ManterASC.asc.num_contrato_cff}" >
<f:selectItem itemLabel="-- Selecione um Contrato --" itemValue="''"/>
<f:selectItems value="#{ManterContrato.listarParaCombo}"/>
<a4j:support event="onchange" reRender="comboASCRelatorioSinteticoOS" action="#{ManterOS.limparDados}" ajaxSingle="true"/>
</h:selectOneMenu>
<h:selectOneMenu id="comboASCRelatorioSinteticoOS" styleClass="combo" style="width:300px;" value="#{ManterOS.os.numAsc}" >
<f:selectItem itemLabel="-- Selecione um Acordo de Serviço --" itemValue="0"/>
<f:selectItems value="#{ManterASC.listarParaCombo}"/>
<a4j:support event="onchange" reRender="frmRelatorioGeralRelatorioSinteticoOS" ajaxSingle="true"/>
</h:selectOneMenu>
</div>
<!-- Tabela com listagem de todos as ordens de Serviço -->
<div class="alignCenter">
<a4j:outputPanel>
<rich:dataTable styleClass="tableList" id="tabelaOSRelatorioSinteticoOS" value="#{ManterOS.listar}" rendered="#{!empty ManterOS.listar}" var="listaRelatorio" binding="#{ManterOS.table}">
<f:facet name="header">
<rich:columnGroup >
<rich:column id="teste1" width="70px">
<h:outputText value="Número OS"/>
</rich:column>
<rich:column id="teste2" width="90px">
<h:outputText value="Data de Abertura"/>
</rich:column>
<rich:column id="teste3" >
<h:outputText value="Tamanho PF"/>
</rich:column>
<rich:column id="teste4" width="250px">
<h:outputText value="Observação"/>
</rich:column>
<rich:column id="teste5" width="180px">
<h:outputText value="Status"/>
</rich:column>
<rich:column id="teste6" width="80px">
<h:outputText value="Exibir Relatório"/>
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column id="RelatorioSinteticoOSNumeroOS" styleClass="alignCenter">
<h:outputText value="#{listaRelatorio.numeroOs}" />
</rich:column>
<rich:column id="RelatorioSinteticoOSDataAbertura" styleClass="alignCenter">
<h:outputText value="#{listaRelatorio.dataAberturaOs}">
<f:convertDateTime pattern="dd/MM/yyyy" timeZone="America/Sao_Paulo"/>
</h:outputText>
</rich:column>
<rich:column id="RelatorioSinteticoOSTamanhoPF" styleClass="alignCenter">
<h:outputText value="#{listaRelatorio.tamanhoPfOs}">
<f:convertNumber pattern="#,##0.00"/>
</h:outputText>
</rich:column>
<rich:column id="RelatorioSinteticoOSObs" styleClass="alignLeft">
<h:outputText value="#{listaRelatorio.obsOs}" />
</rich:column>
<rich:column id="relatorioStatus" styleClass="alignCenter">
<h:outputText value="Aberto" id="RelatorioSinteticoOSNivel0" rendered="#{listaRelatorio.statusOs == 0}"/>
<h:outputText value="Cancelado" id="RelatorioSinteticoOSNivel1" rendered="#{listaRelatorio.statusOs == 1}"/>
<h:outputText value="Fechado" id="RelatorioSinteticoOSNivel2" rendered="#{listaRelatorio.statusOs == 2}"/>
</rich:column>
<rich:column styleClass="imgLista" title="Mostrar Relatório">
<rich:menuItem id="relatorioSinteticoGeradoOS" action="relatorioSinteticoGeradoOS" icon="/images/file.gif" immediate="true">
<f:setPropertyActionListener value="#{listaRelatorio.numeroOs}" target="#{ManterRelatorio.relatorio.numeroOs}" />
</rich:menuItem>
</rich:column>
</rich:dataTable>
</a4j:outputPanel>
</div>
<br />
<a4j:outputPanel rendered="#{empty ManterOS.listar}">
<p>Nenhum registro localizado.</p>
</a4j:outputPanel>
</a4j:form>
</a4j:outputPanel>
</ui:define>
</ui:composition>
Estou isundo um <rich:menuItem para o link da ultima coluna, fiz isso porque se usar um commandlink ele carregava a tela inteira e perdia a arvore do JSF, se tiverem uma ideia melhor de como fazer isso também agradeceria muito :).
Abraço