Senhores, preciso de uma ajuda…
Estou fazendo uma tela que contém a seguinte regra: Após o preenchimento do documento, se o mesmo for CPF, os campos “sexo” e “nascimento” devem ser exibidos. Se o documento for CNPJ, os campos “sexo” e “nascimento” devem sumir. O que acontece é que após o preenchimento do documento é executado uma chamada ajax para buscar os dados e preencher os campos da tela…mas os campos que estao invisíveis não são exibidos.
Segue meu código:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:cc="http://java.sun.com/jsf/composite">
<cc:interface>
<cc:attribute name="pessoaBean" required="true" />
</cc:interface>
<cc:implementation>
<h:outputScript library="sistemasaas_scripts" name="somentenumeros.js" />
<h:outputScript library="sistemasaas_scripts" name="datalocale.js" />
<h:inputHidden id="pessoaid" value="#{cc.attrs.pessoaBean.pessoa.id}" />
<p:fieldset legend="Identificação">
<h:panelGrid columns="4">
<h:outputLabel value="Documento *" for="documento" />
<p:inputText id="documento"
value="#{cc.attrs.pessoaBean.pessoa.documento}"
converter="documentoConverter" size="14" maxlength="14"
required="true" requiredMessage="Informe o número do documento"
onkeypress="return somenteNumero(event);">
<f:validator validatorId="documentoValidator" />
<p:ajax event="change" process="@this"
update="pessoaid, documento, nome, sexo, datadenascimento, logradouro, numero,
complemento, bairro, pngestado, pngcidade, cep, telefone1, telefone2, email, senha"
listener="#{cc.attrs.pessoaBean.carregarDadosPessoa}" />
</p:inputText>
<h:outputLabel value="Nome *" for="nome"/>
<p:inputText id="nome" value="#{cc.attrs.pessoaBean.pessoa.nome}"
size="100" maxlength="100" required="true"
requiredMessage="Informe o nome">
</p:inputText>
<h:outputLabel value="Sexo *" for="sexo"
rendered="#{cc.attrs.pessoaBean.exibeControlesDePessoaFisica}"/>
<p:selectOneMenu id="sexo" immediate="true"
rendered="#{cc.attrs.pessoaBean.exibeControlesDePessoaFisica}"
value="#{cc.attrs.pessoaBean.pessoa.sexo}" effect="fade"
style="width:100px">
<f:selectItem itemLabel="" itemValue="" />
<f:selectItem itemLabel="Feminino" itemValue="F" />
<f:selectItem itemLabel="Masculino" itemValue="M" />
</p:selectOneMenu>
<h:outputLabel value="Nascimento *" for="datadenascimento"
rendered="#{cc.attrs.pessoaBean.exibeControlesDePessoaFisica}"/>
<p:calendar id="datadenascimento"
rendered="#{cc.attrs.pessoaBean.exibeControlesDePessoaFisica}"
value="#{cc.attrs.pessoaBean.pessoa.dataDeNascimento}"
pattern="dd/MM/yyyy" size="12" locale="pt_BR">
</p:calendar>
</h:panelGrid>
</p:fieldset>
<br />
<p:fieldset legend="Endereço">
<h:panelGrid columns="2">
<h:outputLabel value="Logradouro *" for="logradouro" />
<p:inputText id="logradouro"
value="#{cc.attrs.pessoaBean.pessoa.logradouro}" size="100"
maxlength="100" required="true"
requiredMessage="Informe o logradouro">
</p:inputText>
<h:outputLabel value="Número" for="numero" />
<p:inputText id="numero" value="#{cc.attrs.pessoaBean.pessoa.numero}"
size="20" maxlength="20" required="false">
</p:inputText>
<h:outputLabel value="Complemento" for="complemento" />
<p:inputText id="complemento"
value="#{cc.attrs.pessoaBean.pessoa.complemento}" size="20"
maxlength="20" required="false">
</p:inputText>
<h:outputLabel value="Estado *" for="estado" />
<h:panelGroup id="pngestado">
<p:selectOneMenu id="estado" immediate="true"
value="#{cc.attrs.pessoaBean.estadoSelecionado}"
converter="estadoConverter" effect="fade" style="width:275px"
required="true" requiredMessage="Selecione um estado">
<f:selectItem itemLabel="Selecione um estado" itemValue="" />
<f:selectItems value="#{cc.attrs.pessoaBean.estadosCadastrados}"
var="estado" itemLabel="#{estado.nome}" itemValue="#{estado}" />
<p:ajax event="change" process="@this" update="pngcidade" />
</p:selectOneMenu>
</h:panelGroup>
<h:outputLabel value="Cidade *" for="cidade" />
<h:panelGroup id="pngcidade">
<p:selectOneMenu id="cidade"
value="#{cc.attrs.pessoaBean.cidadeSelecionada}"
converter="cidadeConverter" effect="fade" style="width:275px"
required="true" requiredMessage="Selecione uma cidade">
<f:selectItem itemLabel="Selecione uma cidade" itemValue="" />
<f:selectItems value="#{cc.attrs.pessoaBean.cidades}" var="cidade"
itemLabel="#{cidade.nome}" itemValue="#{cidade}" />
</p:selectOneMenu>
</h:panelGroup>
<h:outputLabel value="Bairro *" for="bairro" />
<p:inputText id="bairro" value="#{cc.attrs.pessoaBean.pessoa.bairro}"
size="50" maxlength="50" required="true"
requiredMessage="Informe o bairro">
</p:inputText>
<h:outputLabel value="CEP" for="cep" />
<p:inputMask id="cep" value="#{cc.attrs.pessoaBean.pessoa.cep}"
mask="99999-999" converter="cepConverter"
validatorMessage="Informe um CEP válido">
</p:inputMask>
</h:panelGrid>
</p:fieldset>
<br />
<p:fieldset legend="Contatos">
<h:panelGrid columns="2">
<h:outputLabel value="Telefone 1" for="telefone1" />
<p:inputMask id="telefone1"
value="#{cc.attrs.pessoaBean.pessoa.telefone1}" mask="(99)9999-9999"
converter="telefoneConverter" validatorMessage="Telefone 1 inválido">
</p:inputMask>
<h:outputLabel value="Telefone 2" for="telefone2" />
<p:inputMask id="telefone2"
value="#{cc.attrs.pessoaBean.pessoa.telefone2}" mask="(99)9999-9999"
converter="telefoneConverter" validatorMessage="Telefone 2 inválido">
</p:inputMask>
<h:outputLabel value="Email *" for="email" />
<p:inputText id="email" value="#{cc.attrs.pessoaBean.pessoa.email}"
maxlength="100" size="100" required="true"
requiredMessage="Informe o email"
validatorMessage="Informe um email válido">
</p:inputText>
</h:panelGrid>
</p:fieldset>
<br />
<p:fieldset legend="Acesso">
<h:panelGrid columns="2">
<h:outputLabel value="Senha *" for="senha" />
<p:password id="senha" value="#{cc.attrs.pessoaBean.pessoa.senha}"
maxlength="20" size="20" required="true"
requiredMessage="Informe a senha para acesso ao sistema"
redisplay="true">
</p:password>
</h:panelGrid>
</p:fieldset>
</cc:implementation>
</html>
Meu Bean
package sistemasaas.pessoa;
import java.util.ArrayList;
import java.util.List;
import apisaas.endereco.controller.EnderecoFactory;
import apisaas.endereco.dao.IEnderecoDAO;
import apisaas.endereco.model.Cidade;
import apisaas.endereco.model.Estado;
import apisaas.pessoa.controller.PessoaFactory;
import apisaas.pessoa.dao.IPessoaDAO;
import apisaas.pessoa.model.Pessoa;
import apisaas.utilitarios.ApiSaaSUtilitario;
import apisaas.utilitarios.DocumentoUtilitario;
public class PessoaBean {
protected Pessoa pessoa;
protected List<Estado> estadosCadastrados;
protected Estado estadoSelecionado;
protected List<Cidade> cidadesDoEstado;
protected Cidade cidadeSelecionada;
protected void iniciarPessoaBean() {
this.pessoa = PessoaFactory.criarPessoa();
this.estadosCadastrados = null;
this.estadoSelecionado = null;
this.cidadesDoEstado = null;
this.cidadeSelecionada = null;
}
public Pessoa getPessoa() {
return this.pessoa;
}
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
configurarEstadoECidadeSelecionado();
}
private void configurarEstadoECidadeSelecionado() {
if (possuiEstado()) {
this.estadoSelecionado = this.pessoa.getEstado();
carregarCidades();
if (possuiCidade()) {
this.cidadeSelecionada = this.pessoa.getCidade();
}
}
}
private boolean possuiEstado() {
return this.pessoa.getEstado() != null;
}
public void carregarCidades() {
this.cidadesDoEstado = null;
if (this.estadoSelecionado != null) {
IEnderecoDAO enderecoDAO = EnderecoFactory.criarEnderecoDAO();
this.cidadesDoEstado = enderecoDAO.listarCidadesDoEstado(this.estadoSelecionado);
} else {
this.cidadesDoEstado = new ArrayList<Cidade>();
}
}
private boolean possuiCidade() {
return this.pessoa.getCidade() != null;
}
public void setEstadoSelecionado(Estado estadoSelecionado) {
this.estadoSelecionado = estadoSelecionado;
carregarCidades();
}
public Estado getEstadoSelecionado() {
if (possuiEstado()) {
this.estadoSelecionado = this.pessoa.getEstado();
}
return estadoSelecionado;
}
public void setCidadeSelecionada(Cidade cidadeSelecionada) {
this.cidadeSelecionada = cidadeSelecionada;
}
public Cidade getCidadeSelecionada() {
if (possuiCidade()) {
this.cidadeSelecionada = this.pessoa.getCidade();
}
return cidadeSelecionada;
}
public List<Estado> getEstadosCadastrados() {
if (! ApiSaaSUtilitario.isListaValida(this.estadosCadastrados)) {
IEnderecoDAO enderecoDAO = EnderecoFactory.criarEnderecoDAO();
this.estadosCadastrados = enderecoDAO.listarEstados();
}
return estadosCadastrados;
}
public List<Cidade> getCidades() {
if (! ApiSaaSUtilitario.isListaValida(this.cidadesDoEstado)) {
carregarCidades();
}
return this.cidadesDoEstado;
}
public void carregarDadosPessoa() {
String documento = this.pessoa.getDocumento();
Pessoa pessoa = retornarPessoa(documento);
if (pessoa != null) {
this.pessoa = pessoa;
this.estadoSelecionado = pessoa.getEstado();
this.cidadeSelecionada = pessoa.getCidade();
carregarCidades();
}
}
private Pessoa retornarPessoa(String documento) {
if (ApiSaaSUtilitario.isStringValida(documento)) {
IPessoaDAO pessoaDAO = PessoaFactory.criarPessoaDAO();
return pessoaDAO.buscarPeloDocumento(documento);
}
return null;
}
protected void atribuirEstadoECidade() {
this.pessoa.setCidade(this.cidadeSelecionada);
this.pessoa.setEstado(this.estadoSelecionado);
}
public boolean isExibeControlesDePessoaFisica() {
boolean ehPessoaFisica = DocumentoUtilitario.isCPFValido(this.pessoa.getDocumento());
return ehPessoaFisica;
}
}
Se eu fizer com o atributo disabled funciona blz…os controles são habilitados e desabilitados dinamicamente, mas com rendered não funciona.