[RESOLVIDO] JSF - Problema com binding

Ola a todos!

Estou com um problema de binding no jsf e fiz uma busca (aqui no fórum e na net) e não achei algo semelhante. Ficaria muito grato com a ajuda vocês.
No meu ManagedBean tenho 4 UIInput que representam meus inputText no jsp. São eles

private UIInput uiiCodEstado; private UIInput uiiNomeEstado; // private UIInput uiiCodPais; private UIInput uiiNomePais;

Veja o jsp

                        <!-- CAMPO PAIS -->
                        <h:outputLabel value="País" for="codPais"/>                        
                        <h:panelGroup>                                              
                            <a4j:region id="regionPais">                                
                                <h:inputText id="codPais" value="#{cidadeWebBean.registro.estado.id.codPais}" 
                                             readonly="#{cidadeWebBean.editarState}"  size="3" maxlength="3" 
                                             required="true" 
                                             binding="#{cidadeWebBean.uiiCodPais}"                                             
                                             requiredMessage="Digite o País">                                                                            
                                    
                                    <a4j:support action="#{cidadeWebBean.changeNomePais}"   
                                                 event="onkeyup" reRender="nomePais" immediate="true"/>                                                                
                                    
                                </h:inputText>
                                <a4j:commandButton value="... " immediate="true" action="#{cidadeWebBean.paisPopup.criaPesquisa}"                               
                                                   oncomplete="javascript:Richfaces.showModalPanel('popupPais',{width:520, top:200, height:350})"
                                                   reRender="codPais,nomePais,tablepoppais"
                                                   disabled="#{cidadeWebBean.editarState}">                           
                                </a4j:commandButton>          
                                
                                <h:inputText id="nomePais" disabled="true" size="34" maxlength="50"
                                             binding="#{cidadeWebBean.uiiNomePais}"                  
                                             value="#{cidadeWebBean.registro.estado.pais.nome}"/>                                                                                                                               
                                
                            </a4j:region>
                        </h:panelGroup>
                        
                        <!-- CAMPO ESTADO -->
                        <h:outputLabel value="Estado" for="codEstado"/>
                        <h:panelGroup>                            
                            <a4j:region id="regionEstado">                                
                                <h:inputText id="codEstado" value="#{cidadeWebBean.registro.estado.id.codEstado}" 
                                             readonly="#{cidadeWebBean.editarState}"  size="3" maxlength="3" 
                                             required="true" 
                                             binding="#{cidadeWebBean.uiiCodEstado}"                                             
                                             requiredMessage="Digite o Estado">                                                                            
                                    
                                    <a4j:support action="#{cidadeWebBean.changeNomeEstado}"   
                                                 event="onkeyup" reRender="nomeEstado" immediate="true"/>                                                                
                                    
                                </h:inputText>
                                <a4j:commandButton value="... " immediate="true" action="#{cidadeWebBean.estadoPopup.criaPesquisa}"                               
                                                   oncomplete="javascript:Richfaces.showModalPanel('popupEstado',{width:520, top:200, height:350})"
                                                   reRender="codEstado,nomeEstado,tablepopEstado"
                                                   disabled="#{cidadeWebBean.editarState}">                           
                                </a4j:commandButton>          
                                <h:inputText id="nomeEstado" disabled="true" size="34" maxlength="50"
                                             binding="#{cidadeWebBean.uiiNomeNomeEstado}"
                                             value="#{cidadeWebBean.registro.estado.nome}"/>                                                                                                 
                                
                            </a4j:region>
                        </h:panelGroup>

Quando o usuário muda o código o pais ele executa o metodo abaixo para pegar o valor do código do País e atribuir (via binding) o nome do Pais.
Este método funciona 100%.

public void changeNomePais() { String nomePais = new String(); String codPais = (String)getUiiCodPais().getSubmittedValue(); nomePais = this.getBean().getNome(Pais.class, (String)getUiiCodPais().getSubmittedValue()); if (nomePais != null) { this.getUiiNomePais().setValue(nomePais); this.getRegistro().getEstado().getPais().setCodPais(codPais); this.getRegistro().getEstado().getPais().setNome(nomePais); } else{ this.getUiiNomePais().setValue(""); } }

O metodo abaixo era pra trazer o nome do estado conforme o código do estado (pego pelo binding) e o código do país (pelo pelo binding), mas não traz o nome.
Fiz um debug e vi que o getUiiCodPais().getSubmittedValue() retorna null. O getUiiCodEstado().getSubmittedValue() retorna o valor normal.
Pq neste método não consigo pegar o valor do uiiCodPais? (sendo q no método anterior está ok)
Estou fazendo algo de errado?

    public void changeNomeEstado() {
        String nomeEstado = new String();      
        EstadoPK estadoPK = new EstadoPK();
        
        estadoPK.setCodPais((String)getUiiCodPais().getSubmittedValue());        
        estadoPK.setCodEstado((String)getUiiCodEstado().getSubmittedValue());
        
        nomeEstado = this.getBean().getNome(Estado.class, estadoPK);        
        if (nomeEstado != null) {         
            this.getUiiNomeNomeEstado().setValue(nomeEstado);
            this.getRegistro().getEstado().getId().setCodEstado(estadoPK.getCodEstado());                                 
        }
        else{
            this.getUiiNomeNomeEstado().setValue("");
        }
    }

Obs.: Já tentei trocar o getSubmittedValue() por getValue() e getLocalValue() e mesmo assim retorna null

Desde já agradeço as respostas

Cleriston, eu não identifiquei onde vc colocou o form, quero dizer q provavelmente no submit do estado naquela tag support, não esta sendo submetido o pais, eu vejo duas opções: ou vc muda o escopo do bean para session (caso nao seja), ou coloca um saveState (tomahawk, o do a4j eu nao lembro, mas ele tb tem). O que essa tag faz é colocar em todos os forms da pagina os atributos do bean utilizado na tag saveState. Não sei se ficou claro essa ultima frase, mas o que quero dizer é q em qualque submit será enviado todos os dados do teu bean.

obs.:
No caso da configuração do jsf

[quote]
javax.faces.STATE_SAVING_METHOD
client
[/quote]

caso utilize server, esse tratamento é feito no servidor como um bean de escopo pseudo-session.

[]´s

Humberto Lima

Olá Humberto! Obrigado pela atenção

Eu já estou usando o saveState do tomahawk. Os dois campos estão dentro da mesma tag <h:form>. Tanto que qdo modifico o valor no campo codPais ele consegue pegar o valor do campo. Só não consegue pegar o valor do codPais qdo mudo o valor do codEstado.

O q seria esta configuração? Qual a diferença entre client e server?
Depois q mudei começou a dar error com as propriedades dos meus ManagedBean por nao serem serializados.

RESOLVI

O meu amigo Victor Fugiwara me ajudou. Era só colocar os 2 InputText no mesmo a4j:region

Vlw :smiley: