Companheiros,
já li trocentos relatos de problemas com listeners em p:selectOneMenu do primefaces, onde o método do listener simplesmente não é invocado quando se muda o valor do selectOneMenu. Mas o meu caso eu nunca vi nada igual. O Listener é invocado na mudança de item de menu, mas SOMENTE DA SEGUNDA VEZ EM DIANTE. Colocando no depurador, percebi que, na primeira vez em que mudo o valor do select, o método do listener nem sequer é chamado, como se eu não tivesse feito nada. Aí, quando tento UMA SEGUNDA VEZ, aí sim, o método é chamado e funciona perfeitamente a partir daí. Se alguém tiver uma luz de como eu faço pra ele invocar o método já no primeiro clique no select, eu ficaria muito agradecido.
Meu form:
<form id="f3">
<p:selectOneMenu value="#{classificacaoMB.periodo}" style="width: 207px" >
<f:selectItems value="#{classificacaoMB.periodos}" />
<p:ajax event="change" listener="#{classificacaoMB.valueChangeListener}" update="f2" />
</p:selectOneMenu>
</form>
Meu listener, lá no managed bean:
public void valueChangeListener(){
classificaGecex();
}
Talvez importe saber como classificacaoMB.periodos é gerado lá no DAO:
while(rs.next()){
mes = rs.getInt("mes");
switch(mes){
case 1: mesStr = "Janeiro"; break;
case 2: mesStr = "Fevereiro"; break;
case 3: mesStr = "Março"; break;
case 4: mesStr = "Abril"; break;
case 5: mesStr = "Maio"; break;
case 6: mesStr = "Junho"; break;
case 7: mesStr = "Julho"; break;
case 8: mesStr = "Agosto"; break;
case 9: mesStr = "Setembro"; break;
case 10: mesStr = "Outubro"; break;
case 11: mesStr = "Novembro"; break;
case 12: mesStr = "Dezembro"; break;
}
ano = rs.getString("ano");
periodos.add(new SelectItem(rs.getString("Periodo"), mesStr + "/" + ano));
}
Lembrando que não uso nenhum tipo de submit ou qualquer navegação de página a página. Os dados são atualizados via ajax, e o formulário “F2” é perfeitamente atualizado ao mudar o valor do select PELA SEGUNDA VEZ EM DIANTE.