Mistura de dados em tabelas no richfaces

1 resposta
satangoss

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

1 Resposta

satangoss

Alguem??

Criado 30 de agosto de 2010
Ultima resposta 30 de ago. de 2010
Respostas 1
Participantes 1