Olá, pessoal. Estou com um problema na página xhtml do meu projeto. Estou montando um sistema que será usado para controle de fazendas. Neste programa tenho vários cadastros para serem feitos como usuário, gado e propriedades. Ao mesmo tempo que estou montando as telas de cadastro, estou montando também as telas de consulta de cadastro. Na tela de consulta de usuários e gado, consegui fazer. Mas quando tento carregar a página de consulta de propriedades, o Eclipse acusa um erro. O erro é o seguinte:
GRAVE: JSF1007: ID de componente duplicada frmPesquisa:id encontrada na visualização.
Pesquisei na internet e encontrei vários tópicos, mas todos com respostas relativamente vagas e não consegui entender direito o que exatamente devo fazer.
Estou postando o código do arquivo .xhtml da página de consulta de propriedades e também o código da página de consulta de usuário.
Deixo avisado que a página de consulta de usuário está funcionando normalmente. Somente a página de consulta de propriedades é que está dando problema.
Algumas observações:
- o id frmPesquisa está sendo usado tanto na tela de pesquisa de usuário como na tela de pesquisa de propriedades e também na tela de pesquisa de gado e somente na página de pesquisa de propriedades está dando este erro.
- Já testei trocar o id frmPesquisa para outro nome, mas o erro persiste. Quando eu troco o id, somente muda a parte de “frmPesquisa” da mensagem de erro.
- Eu me baseei no código da página de pesquisa de usuário para montar a página de pesquisa de propriedades. Por isso, é possível que exista uma ou outra variável ou atributo que esqueci de mudar de nome.
PesquisaPropriedade.xhtml
<ui:composition template="/WEB-INF/template/LayoutPadrao.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h ="http://java.sun.com/jsf/html"
xmlns:f ="http://java.sun.com/jsf/core"
xmlns:ui ="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p ="http://primefaces.org/ui">
<ui:define name="titulo">Pesquisar Propriedades</ui:define>
<ui:define name="corpo">
<h:form id="frmPesquisa">
<p:messages showDetail="false" showSummary="true" autoUpdate="true" />
<h1>Pesquisa de propriedades</h1>
<p:toolbar style="margin-top: 20px">
<p:toolbarGroup>
<p:commandButton value="Pesquisar" action="#{pesquisaPropriedadeBean.pesquisar}" update="@form" />
<p:selectOneRadio id="id" value="#{pesquisaPropriedadeBean.filtro.status}" >
<f:selectItem itemLabel="Ativo" itemValue="Ativo" />
<f:selectItem itemLabel="Inativo" itemValue="Inativo" />
</p:selectOneRadio>
</p:toolbarGroup>
<p:toolbarGroup align ="right">
<p:button value="Novo" outcome="/propriedade/CadastroPropriedade"/>
</p:toolbarGroup>
</p:toolbar>
<p:panelGrid columns="2" id="painel" style="width: 100%; margin-top: 20px" columnClasses="rotulo, campo">
<p:outputLabel value="id" for="id"/>
<p:inputText id="id" size="60" maxlength="80"
value="#{pesquisaPropriedadeBean.filtro.propriedadeId}"/>
</p:panelGrid>
<p:dataTable id="propriedadesTable"
value="#{pesquisaPropriedadeBean.propriedadesFiltradas}" var="propriedade"
style="margin-top: 20px" emptyMessage="Nenhuma propriedade encontrada."
rows="20" paginator="true" paginatorAlwaysVisible="false"
paginatorPosition="bottom">
<p:column headerText="Id" style="text-align: center; width: 100px">
<h:outputText value="#{propriedade.id}" />
</p:column>
<p:column headerText="Nome" style="text-align: center; width: 100px">
<h:outputText value="#{propriedade.nome}" />
</p:column>
<p:column headerText="Proprietário" style="text-align: center; width: 100px">
<h:outputText value="#{propriedade.usuario}" />
</p:column>
<p:column headerText="Área" style="text-align: center; width: 100px">
<h:outputText value="#{propriedade.area}" />
</p:column>
<p:column headerText="matrícula" style="text-align: center; width: 100px">
<h:outputText value="#{propriedade.matricula}" />
</p:column>
<p:column headerText="Estado" style="text-align: center; width: 100px">
<h:outputText value="#{propriedade.estado}" />
</p:column>
<p:column headerText="Cidade" style="text-align: center; width: 100px">
<h:outputText value="#{propriedade.cidade}" />
</p:column>
<p:column headerText="Endereço" style="text-align: center; width: 100px">
<h:outputText value="#{propriedade.endereco}" />
</p:column>
<p:column headerText="Status" style="text-align: center; width: 100px">
<h:outputText value="#{propriedade.status}" />
</p:column>
<p:column headerText="Operações" style="width: 100px; text-align: center">
<c:set var ="status" scope = "session"/>
<p:button outcome = "/propriedade/CadastroPropriedade" icon="ui-icon-pencil" title="Editar" disabled ="#{pesquisaPropriedadeBean.inativo}">
<f:param name="propriedade" value="#{propriedade.id}" />
</p:button>
<p:commandButton icon="ui-icon-bloquear" title="Alterar status do cadastro" oncomplete="PF('confirmacaoExclusao').show()" process="@this" update="frmPesquisa:confirmacaoExclusaoDialog">
<f:setPropertyActionListener value="#{propriedade}" target="#{pesquisaPropriedadeBean.propriedadeSelecionada}"/>
</p:commandButton>
</p:column>
</p:dataTable>
<p:confirmDialog header="Alterar status do cadastro"
message="Tem certeza que deseja alterar o status do cadastro da propriedade #{pesquisaPropriedadeBean.propriedadeSelecionada.nome}?"
widgetVar="confirmacaoExclusao" id="confirmacaoExclusaoDialog">
<p:button value="Não"
onclick="PF('confirmacaoExclusao').hide(); return false;" />
<p:commandButton value="Sim"
oncomplete="PF('confirmacaoExclusao').hide();" action="#{pesquisaPropriedadeBean.excluir}" process="@this" update="frmPesquisa:propriedadesTable"/>
</p:confirmDialog>
</h:form>
</ui:define>
</ui:composition>
PesquisaUsuario.xhtml
<ui:composition template="/WEB-INF/template/LayoutPadrao.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h ="http://java.sun.com/jsf/html"
xmlns:f ="http://java.sun.com/jsf/core"
xmlns:ui ="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p ="http://primefaces.org/ui">
<ui:define name="titulo">Pesquisar Usuarios</ui:define>
<ui:define name="corpo">
<h:form id="frmPesquisa2">
<p:messages showDetail="false" showSummary="true" autoUpdate="true" />
<h1>Pesquisa de usuários</h1>
<p:toolbar style="margin-top: 20px">
<p:toolbarGroup>
<p:commandButton value="Pesquisar" action="#{pesquisaUsuarioBean.pesquisar}" update="@form" />
<p:selectOneRadio id="id" value="#{pesquisaUsuarioBean.filtro.status}" >
<f:selectItem itemLabel="Ativo" itemValue="Ativo" />
<f:selectItem itemLabel="Inativo" itemValue="Inativo" />
</p:selectOneRadio>
</p:toolbarGroup>
<p:toolbarGroup align ="right">
<p:button value="Novo" outcome="/usuario/CadastroUsuario"/>
</p:toolbarGroup>
</p:toolbar>
<p:panelGrid columns="2" id="painel" style="width: 100%; margin-top: 20px" columnClasses="rotulo, campo">
<p:outputLabel value="Nome" for="nome"/>
<p:inputText id="nome" size="60" maxlength="80"
value="#{pesquisaUsuarioBean.filtro.nome}"/>
</p:panelGrid>
<p:dataTable id="usuariosTable"
value="#{pesquisaUsuarioBean.usuariosFiltrados}" var="usuario"
style="margin-top: 20px" emptyMessage="Nenhum usuario encontrado."
rows="20" paginator="true" paginatorAlwaysVisible="false"
paginatorPosition="bottom">
<p:column headerText="Id" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.id}" />
</p:column>
<p:column headerText="Nome" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.nome}" />
</p:column>
<p:column headerText="RG" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.rg}" />
</p:column>
<p:column headerText="CPF" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.cpf}" />
</p:column>
<p:column headerText="Email" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.email}" />
</p:column>
<p:column headerText="Telefone" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.telefone}" />
</p:column>
<p:column headerText="Celular" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.celular}" />
</p:column>
<p:column headerText="Endereço" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.endereco}" />
</p:column>
<p:column headerText="Estado" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.estado}" />
</p:column>
<p:column headerText="Cidade" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.cidade}" />
</p:column>
<p:column headerText="CEP" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.cep}" />
</p:column>
<p:column headerText="Status" style="text-align: center; width: 100px">
<h:outputText value="#{usuario.status}" />
</p:column>
<p:column headerText="Operações" style="width: 100px; text-align: center">
<c:set var ="status" scope = "session"/>
<p:button outcome = "/usuario/CadastroUsuario" icon="ui-icon-pencil" title="Editar" disabled ="#{pesquisaUsuarioBean.inativo}">
<f:param name="usuario" value="#{usuario.id}" />
</p:button>
<p:commandButton icon="ui-icon-bloquear" title="Alterar status do cadastro" oncomplete="PF('confirmacaoExclusao').show()" process="@this" update="frmPesquisa2:confirmacaoExclusaoDialog">
<f:setPropertyActionListener value="#{usuario}" target="#{pesquisaUsuarioBean.usuarioSelecionado}"/>
</p:commandButton>
</p:column>
</p:dataTable>
<p:confirmDialog header="Alterar status do cadastro"
message="Tem certeza que deseja alterar o status do cadastro do usuário #{pesquisaUsuarioBean.usuarioSelecionado.nome}?"
widgetVar="confirmacaoExclusao" id="confirmacaoExclusaoDialog">
<p:button value="Não"
onclick="PF('confirmacaoExclusao').hide(); return false;" />
<p:commandButton value="Sim"
oncomplete="PF('confirmacaoExclusao').hide();" action="#{pesquisaUsuarioBean.excluir}" process="@this" update="frmPesquisa2:usuariosTable"/>
</p:confirmDialog>
</h:form>
</ui:define>
</ui:composition>
Eu gostaria de saber o que exatamente devo fazer para acabar com este erro. Sei que deve ser coisa simples, mas não estou acostumado a mexer com esta quantidade de código e isto está me atrapalhando.
Desde já, agradeço as sugestões e opiniões.