Boa tarde pessoal
Tenho um cadastro com a estrutura abaixo:
bairro.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:composition template="/WEB-INF/templates/interno.xhtml">
<ui:define name="css">
<h:outputStylesheet library="css" name="bairro.css" />
</ui:define>
<ui:define name="titulo">- Cadastro de Bairros</ui:define>
<ui:define name="conteudo">
<h:panelGroup id="cadastro">
<h:panelGroup rendered="#{!bairroBean.editando}">
<ui:include src="/WEB-INF/endereco/cadBairro.xhtml" />
</h:panelGroup>
<h:panelGroup rendered="#{bairroBean.editando}">
<ui:include src="/WEB-INF/endereco/regBairro.xhtml" />
</h:panelGroup>
</h:panelGroup>
</ui:define>
</ui:composition>
</html>
cadBairro.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ci="http://java.sun.com/jsf/composite/components/inputs">
<h:body>
<h:form id="frmCadastro">
<h:panelGroup id="pnlFiltro">
<h:outputText value="Filtro" styleClass="tituloInterno" />
<h:panelGrid columns="2">
<h:outputLabel for="cbxEstado" value="Estado:" />
<h:outputLabel for="txtCidade" value="Cidade:" />
<h:panelGroup>
<h:selectBooleanCheckbox id="chkIncluirEstado" value="#{bairroBean.incluirEstado}">
<f:ajax render="cbxEstado" onevent="controleAjax" />
</h:selectBooleanCheckbox>
<h:selectOneMenu id="cbxEstado" value="#{bairroBean.estado}" disabled="#{not bairroBean.incluirEstado}">
<f:selectItems var="estado" value="#{bairroBean.estados}" itemValue="#{estado}" itemLabel="#{estado.descricao}" />
<f:converter converterId="estadoConverter" />
</h:selectOneMenu>
</h:panelGroup>
<h:panelGroup>
<h:selectBooleanCheckbox id="chkIncluirCidade" value="#{bairroBean.incluirCidade}">
<f:ajax render="frmCadastro:txtCidade:input" onevent="controleAjax" />
</h:selectBooleanCheckbox>
<ci:caixaEdicao id="txtCidade" value="#{bairroBean.cidade}" maxlength="50" size="25" readonly="#{!bairroBean.incluirCidade}" />
</h:panelGroup>
</h:panelGrid>
<h:panelGrid columns="3">
<h:outputLabel for="txtDescricao" value="Descrição:" />
<h:outputText />
<h:outputText />
<ci:caixaEdicao id="txtDescricao" value="#{bairroBean.descricao}" maxlength="50" size="25" />
<h:commandButton value="Pesquisar"
action="#{bairroBean.pesquisar()}">
<f:ajax execute="@form" render=":mensagem pnlTabela" onevent="controleAjax" />
</h:commandButton>
<h:commandButton value="Novo"
action="#{bairroBean.novo()}" immediate="true">
<f:ajax execute="@form" render=":mensagem :cadastro" onevent="controleAjax" />
</h:commandButton>
</h:panelGrid>
</h:panelGroup>
<h:panelGroup id="pnlTabela">
<ci:grid value="#{bairroBean.modelos}"
rendered="#{not empty bairroBean.modelos}"
columnClasses="colBtn,colBtn,colEstado,colCidade,colDescricao">
<h:column>
<h:commandLink id="lnkAlterar"
action="#{bairroBean.alterar()}"
immediate="true"
title="Alterar bairro: #{modelo.descricao}">
<f:setPropertyActionListener target="#{bairroBean.modelo}" value="#{modelo}" />
<f:ajax render=":mensagem :cadastro" onevent="controleAjax" />
<h:graphicImage library="img" name="editar.png" />
</h:commandLink>
</h:column>
<h:column>
<h:commandLink id="lnkExcluir"
action="#{bairroBean.excluir()}"
onclick="if (!confirm('Excluir bairro: #{modelo.descricao}?')) return false;"
immediate="true"
title="Excluir bairro: #{modelo.descricao}">
<f:setPropertyActionListener target="#{bairroBean.modelo}" value="#{modelo}" />
<f:ajax render=":mensagem :cadastro" onevent="controleAjax" />
<h:graphicImage library="img" name="excluir.png" />
</h:commandLink>
</h:column>
<h:column>
<f:facet name="header">Estado</f:facet>
<h:outputText value="#{modelo.cidade.estado.descricao}" />
</h:column>
<h:column>
<f:facet name="header">Cidade</f:facet>
<h:outputText value="#{modelo.cidade.descricao}" />
</h:column>
<h:column>
<f:facet name="header">Descrição</f:facet>
<h:outputText value="#{modelo.descricao}" />
</h:column>
</ci:grid>
</h:panelGroup>
</h:form>
</h:body>
</html>
regBairro.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:cb="http://java.sun.com/jsf/composite/components/busca"
xmlns:ci="http://java.sun.com/jsf/composite/components/inputs"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<h:form id="frmRegistro">
<h:panelGrid id="pnlCidade" columns="2">
<h:outputLabel for="txtEstadoReg" value="Estado (*):" />
<ci:caixaEdicao id="txtEstadoReg"
value="#{bairroBean.modelo.cidade.estado.descricao}"
size="15"
readonlyLabel="true" />
<h:outputLabel for="txtCidadeReg" value="Cidade (*):" />
<ci:caixaEdicao id="txtCidadeReg"
value="#{bairroBean.modelo.cidade.descricao}"
size="20"
readonlyLabel="true" />
<h:commandButton value="Procurar" onclick="dlgBuscaCidade.mostrar();return false;" />
</h:panelGrid>
<h:panelGrid>
<h:outputLabel for="txtDescricaoReg" value="Descrição (*):" />
<ci:maiusculo id="txtDescricaoReg" value="#{bairroBean.modelo.descricao}"
size="25" maxlength="50" />
</h:panelGrid>
<h:panelGrid columns="2">
<h:commandButton value="Gravar"
action="#{bairroBean.gravar()}">
<f:ajax execute="@form" render=":mensagem :cadastro" onevent="controleAjax" />
</h:commandButton>
<h:commandButton value="Cancelar"
action="#{bairroBean.cancelar()}" immediate="true">
<f:ajax execute="@form" render=":mensagem :cadastro" onevent="controleAjax" />
</h:commandButton>
</h:panelGrid>
</h:form>
<cb:buscaCidade id="dlgBuscaCidade"
cidade="#{bairroBean.modelo.cidade}"
update=":frmRegistro:pnlCidade" />
</h:body>
</html>
Se observar os xhtmls, tem o regBairro que tem um componente chamado buscaCidade com o código abaixo:
buscaCidade.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:cc="http://java.sun.com/jsf/composite"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:cu="http://java.sun.com/jsf/composite/components/util"
xmlns:ci="http://java.sun.com/jsf/composite/components/inputs">
<cc:interface>
<cc:attribute name="id" />
<cc:attribute name="update" type="java.lang.String" />
<cc:attribute name="cidade" required="true" type="br.com.tebosoftware.modelo.endereco.Cidade" />
<cc:valueHolder name="cidade" targets="dglBuscaCidade" />
<cc:editableValueHolder name="cidade" targets="dglBuscaCidade" />
</cc:interface>
<cc:implementation>
<h:outputStylesheet library="css" name="cidade.css" />
<cu:painelModal id="painelModal" widget="#{cc.attrs.id}" titulo="Selecionar Cidade"
width="500" height="400"
aoMostrar="focalizar('#{cc.clientId}:painelModal:txtDescricao:input')">
<h:form prependId="false">
<h:panelGrid columns="3">
<h:outputLabel for="cbxEstado" value="Estado:" />
<h:outputLabel for="txtDescricao" value="Descrição:" />
<h:outputText />
<h:panelGroup>
<h:selectBooleanCheckbox id="chkIncluirEstado" value="#{cidadeBean.incluirEstado}">
<f:ajax execute="@form" render=":mensagem cbxEstado" onevent="controleAjax" />
</h:selectBooleanCheckbox>
<h:selectOneMenu id="cbxEstado" value="#{cidadeBean.estado}" disabled="#{not cidadeBean.incluirEstado}">
<f:selectItems var="estado" value="#{cidadeBean.estados}" itemValue="#{estado}" itemLabel="#{estado.descricao}" />
<f:converter converterId="modeloConverter" />
</h:selectOneMenu>
</h:panelGroup>
<ci:caixaEdicao id="txtDescricao" value="#{cidadeBean.descricao}" maxlength="50" size="20" />
<h:commandButton value="Pesquisar"
action="#{cidadeBean.pesquisar()}">
<f:ajax execute="@form" render=":mensagem pnlTabela" onevent="controleAjax" />
</h:commandButton>
</h:panelGrid>
<h:panelGroup id="pnlTabela" style="display:block; height: 330px; overflow: auto;">
<ci:grid id="tabela" value="#{cidadeBean.modelos}"
rendered="#{not empty cidadeBean.modelos}"
columnClasses="colBtn,colDescricao,colSigla">
<h:column>
<h:commandLink id="lnkSelecionar"
immediate="true"
title="Selecionar cidade: #{modelo.descricao}">
<h:graphicImage library="img" name="ativo.png" />
<f:setPropertyActionListener target="#{cc.attrs.cidade}" value="#{modelo}" />
<f:ajax execute="@form" render=":mensagem #{cc.attrs.update}" onevent="#{utilBean.remover2Pontos(cc.clientId)}_aoSelecionar" />
</h:commandLink>
</h:column>
<h:column>
<f:facet name="header">Descrição</f:facet>
<h:outputText value="#{modelo.descricao}" />
</h:column>
<h:column>
<f:facet name="header">Estado</f:facet>
<h:outputText value="#{modelo.estado.sigla}" />
</h:column>
</ci:grid>
</h:panelGroup>
</h:form>
</cu:painelModal>
<script type="text/javascript">
function #{utilBean.remover2Pontos(cc.clientId)}_aoSelecionar(data) {
controleAjax(data);
if (data.status == "complete") {
#{cc.attrs.id}.ocultar();
}
}
</script>
</cc:implementation>
</html>
O problema consiste em:
quando entra pela primeira vez, é exibido o cadBairro.xhtml pois o bean não estará em edição. Se eu clicar no botão pesquisar é feito a pesquisa normal, exibindo os dados no grid (o grid é outro composite componente que facilita o h:datatable).
Se clicar no botão novo ele coloca o bean em edicao e mostra o regBairro.xhtml.
O problema está aí: se eu clico no botão para buscar a cidade, exibe o meu componente de buscaCidade mas se eu clicar na pesquisa dele não funciona e seu eu tentar clicar no botão gravar também não funciona, o único que funciona é o cancelar.
Alguém pode me dar uma luz?