Olá a todos, estou enfrentando um problema que vem me tirando o sono, o corre o seguinte:
Tenho dois selectOneMenu’s, onde com a seleção do primeiro, o outro é populado por meio de ajax, descrito da seguinte forma na jsp:
<h:form id="form">
<hx:scriptCollector>
<h:selectOneMenu value="#{canalBean.bank}" id="bank" required="true">
<f:selectItems value="#{canalBean.bancos}"/>
<hx:inputHelperAssist errorClass="selectOneMenu_Error"
id="assist1" validation="true"/>
</h:selectOneMenu>
<h:message for="bank"/>
<hx:behavior event="onchange" target="bank" behaviorAction="get" targetAction="toRefresh"></hx:behavior>
<hx:panelBox id="toRefresh" >
<h:selectOneMenu disabled="#{empty canalBean.canais}" id="canal" value="#{canalBean.canal}" size="1">
<f:selectItems value="#{canalBean.canais}"/>
</h:selectOneMenu>
<h:message for="canal"/>
</hx:panelBox>
<hx:ajaxRefreshRequest target="toRefresh" id="ajaxRefreshRequest1" params="bank">
</hx:ajaxRefreshRequest>
<hx:commandExButton type="submit" id="registra" action="#{canalBean.registraCanais}" value="OK">
</hx:commandExButton>
</hx:scriptCollector>
</h:form>
E em meu managedBean eu tenho isso:
public class CanalBean {
private String bank;
private String canal;
//setters e getters
public List<SelectItem> getCanais() {
List<SelectItem> list = new ArrayList<SelectItem>();
Map o = (Map)
FacesContext.getCurrentInstance().getApplication().createValueBinding(
"#{param}").getValue(FacesContext.getCurrentInstance());
bank = (String) o.get("bank");
System.out.println("buscou: " + bank);
//por hora só processa o banco real
if (bank != null) {
if (bank.equals("OI")) {
//faz processamento aki
}
}
return list;
}
public List<SelectItem> getBancos() {
List<SelectItem> bancos = new ArrayList<SelectItem>();
SelectItem s = new SelectItem("", "Selecione");
bancos.add(s);
s = new SelectItem("OI", "OI");
bancos.add(s);
s = new SelectItem("AKI", "AKI");
bancos.add(s);
return bancos;
}
public String registraCanais() {
System.out.println("registraCanais()");
int num = Integer.parseInt(canal);//aki ocorre um NullPointerException
return "home";
}
Ok, tudo funciona perfeitamente, quando eu seleciono uma opção no menu, o outro é populado, contudo, no momento que é efetuado o submit, o valor do segundo menu não é injetado no bean.
Por favor eu imploro, alguém me ajude! O que ocorre? O que eu posso fazer?