[RESOLVIDO] Alterar varios InputText(s) de acordo com CEP

6 respostas
T

Boa tarde, tenho uma pagina em jsf 2.0 e tem uma tela de cadastro onde o usuario poderá digitar o CEP e os campos como estado, rua, logadouro, etc, serão preenchidos automaticamente (caso o CEP seja encontrado).

<p:outputLabel value="CEP:" for="jcep" />
					<p:inputMask id="jcep" mask="99999-999" styleClass="campoSemSombra" required="true" requiredMessage="CEP não informado" binding="#{cadCliente.jcep}" valueChangeListener="#{cadCliente.verificaCep}" onchange="submit()"/>
						<p:message for="jcep" display="both" id="msgjcep" />
				
				<p:outputLabel value="Endereço:" for="jender" />						
					<p:inputText id="jender" styleClass="campoSemSombra" required="true" requiredMessage="Endereço não informado" binding="#{cadCliente.jendereco}" />
						<p:message for="jender" display="both" id="msgjender" />

no codigo acima eu coloquei valueChangeListener que irá chamar o metodo no bean assim que sair o campo de foco.
La eu pegarei o valor do CEP e farei a busca no BD.

public void verificaCep(ValueChangeEvent e){
			System.out.println(e.getNewValue().toString());
						
		
		}

Minha duvida é: Como faço para 'escolher' os campos que serão alterados com os valores que receberei do BD?

Achei algumas coisas de alteração de campos mas era tudo com combobox, alguem tem algum exemplo ou alguma dica para apenas InputText(s)?

Obrigado.

6 Respostas

R

boa noite, ao invés de dar o submit no evento javascript, sugiro você fazer o processo por meio de uma requisição ajax.
de moto que na ação você “atualiza” todo seu form, com isso os beans que você populou ja virão preenchidos.

T

Valeu! Consegui aqui. Fiz da seguinte forma:

<p:outputLabel value="CEP:" for="jcep" /> <p:inputMask id="jcep" mask="99999-999" styleClass="campoSemSombra" required="true" requiredMessage="CEP não informado" binding="#{cadCliente.jcep}" > <p:ajax event="blur" update="jender" listener="#{cadCliente.verificaCep}" /> </p:inputMask> <p:message for="jcep" display="both" id="msgjcep" />

No caso estou atualizando apenas o endereço (jender), mas irei colocar os outros componentes que serão atualizados também…

Só mais uma dúvida…
Eu consigo passar algum parametro para o metodo verificacep?
Caso eu queira fazer alguma verificação?

Alys

Eu consigo passar algum parametro para o metodo verificacep?

Eu ainda não precisei fazer isso, mas, creio que sim. Usando f:attribute ou f:param deve funcionar normal.

D

Depende a versão da El utilizada você pode passar assim:

<p:outputLabel value="CEP:" for="jcep" />
					<p:inputMask id="jcep" mask="99999-999" styleClass="campoSemSombra" required="true" requiredMessage="CEP não informado" binding="#{cadCliente.jcep}" >
					<p:ajax event="blur" update="jender" listener="#{cadCliente.verificaCep(oquevcquerpassar)}" />
					</p:inputMask>
						<p:message for="jcep" display="both" id="msgjcep" />

se isso não funcionar… Você quer fazer uma validação do cep? Se for, porque você não pega o jcep que você está utilizando bind no controller?

T

Bom dia,

Então, esse campo InputText ao receber o cep verificará no BD e caso exista ele retornará os outros campos preenchidos.(até ai tudo bem,ja consegui fazer).
Só que é o seguinte:
Eu tenho um cadastro de clientes, nele, o cliente pode ser pessoa juridica ou pessoa fisica. (Estou pensando em separar esse cadastro a pagina xhtml está separado, mas o bean nao, de qlqer maneira seria um codigo igual que teria nos 2 beans).
Entao, a minha ideia era passar por parametro um valor ‘fixo’ por exemplo: se fosse 1 ele iria preencher os fields do juridico, se fosse 2 do pessoa fisica.

edit

<blockquote>Depende a versão da El utilizada você pode passar assim:

view plaincopy to clipboardprint?

<p:outputLabel value=“CEP:” for=“jcep” />

<p:inputMask id=“jcep” mask=“99999-999” styleClass=“campoSemSombra” required=“true” requiredMessage=“CEP não informado” binding="#{cadCliente.jcep}" >

<p:ajax event=“blur” update=“jender” listener="#{cadCliente.verificaCep(oquevcquerpassar)}" />

</p:inputMask>

<p:message for=“jcep” display=“both” id=“msgjcep” /> </blockquote>

funcionou aqui desse jeito. valeu

T

O jeito que foi proposto anteriormente serviria para o que eu pretendia fazer… entretanto, eu vi que aqui ja tinha uma variavel que ativava o panel 1 ou o panel 2 (juridico ou fisico), entao bastava eu pegar o valor desse radio e fazer o if.

Bom, agradeço a ajuda de todos. Resolvido.

Criado 3 de setembro de 2012
Ultima resposta 6 de set. de 2012
Respostas 6
Participantes 4