reRender em campo inputText

4 respostas
T

Caros amigos,

Desejo fazer uma coisa extremamente simples porém não consigo fazer funcionar. Basicamente tenho dois campos inputText, um para digitar o cep e o outro via a4j será reRenderizado para mostrar a rua.

Agradeço qualquer sugestão.

Segue o exemplo básico que estou executando sem sucessso:

JSP

<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich"%>
<%@ taglib prefix="a4j" uri="http://richfaces.org/a4j"%>

<f:view>

	<a4j:keepAlive beanName="testeMB" />
	
	<h:form id="FEditar">
		<h:panelGrid columns="3" id="PGDados">
			<h:outputText value="CEP" />
			<h:inputText id="idCEP" value="#{testeMB.cep}" size="9" maxlength="9">
				<a4j:support event="onblur" ajaxSingle="true"  action="#{testeMB.actionBuscaCEPResidencial}" reRender="idEndereco"/>
			</h:inputText>
			<rich:message for="idCEP"/>
			
			
			<h:outputText value="Endereço" />
			<h:inputText id="idEndereco" value="#{testeMB.endereco}" required="true" size="60">
			</h:inputText>
			<rich:message for="idEndereco"/>
			
		</h:panelGrid>

	</h:form>

</f:view>

MB

public class TesteMB {

	private String endereco = "";
	private String cep = "";
	
	
	public void actionBuscaCEPResidencial() {
		endereco = "Rua ....";
		
	}
	
	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public String getCep() {
		return cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}	
	
	
}

4 Respostas

H

Vê se isso te ajuda.

&lt;a4j:outputPanel id="panel_endereco"&gt;
    &lt;h:panelGrid columns="3" id="PGDados"&gt;

		&lt;h:outputText value="CEP" /&gt;
		&lt;h:inputText id="idCEP" value="#{testeMB.cep}" size="9" maxlength="9"&gt;
			&lt;a4j:support event="onblur" actionListener="#{testeMB.actionBuscaCEPResidencial}" reRender="panel_endereco"/&gt;
		&lt;/h:inputText&gt;
		&lt;rich:message for="idCEP"/&gt;
			
			
		&lt;h:outputText value="Endereço" /&gt;
		&lt;h:inputText id="idEndereco" value="#{testeMB.endereco}" required="true" size="60"&gt;
		&lt;/h:inputText&gt;
		&lt;rich:message for="idEndereco"/&gt;
			
	&lt;/h:panelGrid&gt;
&lt;/a4j:outputPanel&gt;
public void actionBuscaCEPResidencial(ActionEvent event) {  
      endereco = "Rua ....";            
}

Espero ter ajudado.
T

henriquejhc,

Muito obrigado pela sugestão. Infelizmente o problema persiste. O método é executado, o atributo dentro do MB é atualizado porém o reRender não ocorre de jeito nenhum!

Por favor, se você tiver mais alguma sugestão ou outro colega do guj fico muito grato.

Att,
Tássio

T

Caros colegas,

Depois de muita pesquisa encontrei a solução!

É necessário cercar o campo CEP, que irá disparar a action com a4j:region. Foi só fazer isso e tudo passou a funcionar. Segue o código correto para que sirva de exemplo futuro.

JSP

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich"%>
<%@ taglib prefix="a4j" uri="http://richfaces.org/a4j"%>

<f:view>

	<a4j:keepAlive beanName="testeMB" />
	
	<h:form id="FEditar">
		<h:panelGrid columns="3" id="PGDados">
		
			<h:outputText value="CEP" />
			<a4j:region>
				<h:inputText id="idCEP" value="#{testeMB.cep}" size="9" maxlength="9">
					<a4j:support event="onblur" ajaxSingle="true"  action="#{testeMB.actionBuscaCEPResidencial}" reRender="idEndereco"/>
				</h:inputText>
			</a4j:region>
			<rich:message for="idCEP"/>
			
			
			
			<h:outputText value="Endereço" />
			<h:inputText id="idEndereco" value="#{testeMB.endereco}" required="true" size="60">
			</h:inputText>
			<rich:message for="idEndereco"/>
			
		</h:panelGrid>

	</h:form>

</f:view>

MB

public class TesteMB {

	private String endereco = "";
	private String cep = "";
	
	public void actionBuscaCEPResidencial() {
		endereco = "Rua .... 2";
	}
	
	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public String getCep() {
		return cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}
}

Abraço,
Tássio Coêlho

H

Estranho. Eu tenho um formulário onde o usuário digita o cep e eu busco em um webservice todas as informações referentes aquele cep(logradouro, tipo_logradouro, cidade, bairro, uf, etc…) e uso daquela forma que eu te passei o exemplo e funciona perfeitamente. Mas se está funcionando beleza.

Criado 3 de abril de 2010
Ultima resposta 3 de abr. de 2010
Respostas 4
Participantes 2