Dúvida sobre primeface, quando selecionar um item do select desabilitar ou habilitar campos

Bom dia pessoal,

Gostaria que quando fosse selecionado pessoa jurídica ele habilitasse os campos cnpj e informações adicionais e quando fosse selecionado pessoa física ele desabilitasse
esses campos…

Já olhei alguns tópicos e tentei fazer isso de várias formas mas não consegui resolver o problema…

se puderem me ajudar ficarei grato!

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  	
<html xmlns="http://www.w3.org/1999/xhtml"
	    xmlns:ui="http://java.sun.com/jsf/facelets" 
	    xmlns:f="http://java.sun.com/jsf/core" 
	    xmlns:h="http://java.sun.com/jsf/html"
	    xmlns:p="http://primefaces.org/ui">

<h:head>
<title> Testes </title>
</h:head>

<h:body>
<h1>Cadastramento</h1>


	<h:form id="formulario">
	
				<h:outputLabel for="nome" value="Nome: "/><br></br>
				<p:inputText id="nome" value="#{pessoaBean.pessoa.nome}"  /> <p></p>
				
				<h:outputLabel for="cpf" value="CPF: "/><br></br>
				<p:inputText id="cpf" value="#{pessoaBean.pessoa.cpf}"/> <p></p>
				
				<h:outputLabel for="tipoPessoa" value="Tipo: "/><br></br>

				<p:selectOneMenu id="tipoPessoa" value="#{pessoaBean.pessoa.tipo}">
					<f:selectItem itemLabel="Pesoa Jurídica" itemValue="J"  />
					<f:selectItem itemLabel="Pessoa Física" itemValue="F"  />
					   <p:ajax event="change" update="formulario" listener="#{pessoaBean.mudar}" />   
				</p:selectOneMenu>
				<p></p>
				
				<h:outputLabel for="cnpj" value="CNPJ: "/><br></br>
				<p:inputText id="cnpj" value="#{pessoaBean.pessoa.cnpj}" disabled="#{pesoaBean.situacao}"  />
				
				<p></p>
				<h:outputLabel  value="* Informações adicionais: " for="infoAdd" /><br></br>
				<p:inputTextarea id="infoAdd" rows="10" cols="50" queryDelay="950" minQueryLength="4" maxlength="150"
                                 value="#{pessoaBean.pessoa.infoAdd}" disabled="#{pesoaBean.situacao}"/>
				
				<p></p>
				<p:commandButton action="#{pessoaBean}" id="cadastrar"  value="Cadastrar" />
			
 	</h:form>
 
</h:body>
</html>


@ManagedBean
public class PessoaBean {
	
	private Pessoa pessoa;
	private boolean situacao;
	
	
	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}



	public boolean isSituacao() {
		return situacao;
	}

	public void setSituacao(boolean situacao) {
		this.situacao = situacao;
	}

	public void mudar() {  
         if(pessoa.getTipo().equals("J")){
        	 this.situacao = false;
         }else{
        	 this.situacao = true;
         }
    }  
}

Você tentou dar um update no campo CNPJ ao invés do form?

Lucas, obrigado pela sua resposta…

Consegui resolver, e também fiz algumas alterações. Quando é pessoa física ele habilita o campo CPF e não renderiza o fieldset que tem CNPJ e informações adicionais e quando é pessoa jurídica ele desabilita o CPF e renderiza o fieldset…

Estou postando o código caso alguém tenha o mesmo problema :slight_smile:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  	
<html xmlns="http://www.w3.org/1999/xhtml"
	    xmlns:ui="http://java.sun.com/jsf/facelets" 
	    xmlns:f="http://java.sun.com/jsf/core" 
	    xmlns:h="http://java.sun.com/jsf/html"
	    xmlns:p="http://primefaces.org/ui">

<h:head>
<title> Testes </title>
</h:head>

<h:body>
<h1>Cadastramento</h1>

 
	<h:form id="form1">
	
		<p:panel id="grade" columns="1">  
				<h:outputLabel for="nome" value="Nome: "/><br></br>
				<p:inputText id="nome" value=""  /> <p></p>
				
				<h:outputLabel for="cpf" value="CPF: "/><br></br>
				<p:inputText id="cpf" value="" disabled="#{pessoaBean.isRederiza}"/> <p></p>
				
				<h:outputLabel for="tipoPessoa" value="Tipo: "/><br></br>

			    <p:selectOneMenu id="tipoPessoa" value="#{pessoaBean.opcao}">
			        <f:selectItem itemLabel="Pessoa Física" itemValue="F" />
					<f:selectItem itemLabel="Pesoa Jurídica" itemValue="J"  />
					   <p:ajax listener="#{pessoaBean.renderizar}" update=":form1:grade" />    
				</p:selectOneMenu> 
				<p></p>
				
				<p:fieldset id="pac" legend="Estrangeiro" rendered="#{pessoaBean.isRederiza}">  
				
				<h:outputLabel for="cnpj" value="CNPJ: "/><br></br>
				<p:inputText id="cnpj" value=""   />
				
				<p></p>
				<h:outputLabel  value="* Informações adicionais: " for="infoAdd" /><br></br>
				<p:inputTextarea id="infoAdd" rows="10" cols="50" queryDelay="950" minQueryLength="4" maxlength="150" value=""/>
				
				<p></p>

				</p:fieldset>

                        <p:commandButton action="#{pessoaBean}" id="cadastrar"  value="Cadastrar" />
				
		 </p:panel>	
 	</h:form>

</h:body>
</html>
package bean;

import javax.faces.bean.ManagedBean;

@ManagedBean
public class PessoaBean {
	
	private String opcao;  
    private Boolean isRederiza = false; 
    
 
	
	public String getOpcao() {
		return opcao;
	}

	public void setOpcao(String opcao) {
		this.opcao = opcao;
	}

	public Boolean getIsRederiza() {
		return isRederiza;
	}



	public void setIsRederiza(Boolean isRederiza) {
		this.isRederiza = isRederiza;
	}



	public void renderizar() {  
	        if(getOpcao().equals("J")){  
	            isRederiza = true;  
	        } else {  
	            isRederiza = false;  
	        }  
	    }  
}

tomei como base esse tópico aqui: http://www.guj.com.br/java/279016-resolvido-duvida-em-rendered-do-primefaces-com-ajax