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