JSF - <h:selectOneRadio> retorna Validation Error sem sentido

Olá,

Considerem o código abaixo:

<f:view>
                                    <h:form>
                                        <h:outputText value="#{enqueteBean.enqueteAtual}"/>
                                        <h:selectOneRadio styleClass="textoenquete" layout="pageDirection" value="#{opcaoBean.id}" required="true">
                                            <f:selectItems value="#{enqueteBean.opcoesAsItems}"/>
                                        </h:selectOneRadio>
                                        <center>
                                            <h:commandButton action="#{opcaoBean.votar}" styleClass="botao" value="Votar"/>
                                            <h:commandButton action='resultados' styleClass="botao" value=" Resultados "/>
                                        </center>
                                        <h:messages/>
                                    </h:form>
                                </f:view>

Onde:

  • "#{enqueteBean.enqueteAtual}" retorna o título da enquete;
  • "#{enqueteBean.opcoesAsItems}"retorna um List < SelectItem>, onde cada selectItem é instanciado com um valor Integer em "value". Este valor deveria ser passado para a propriedade #{opcaoBean.id};
  • "#{opcaoBean.votar}" é a action que incrementa o valor de uma opção da enquete em 1;

Ao dar submit no form, JSF retorna uma mensagem de erro:

"Validation Error: value is not valid."

A ação sequer é executada (votar()). Claro, pois JSF sequer passa da fase de validação! Ao ver o código fonte da página, os radio buttons são renderizados corretamente, cada um com um value diferente.

O que há de errado com esse código? Já tô ficando louco! :shock:

Abraço!

Rodrigo

Ele esta dizendo que o valor que vc esta passando para ñão foi o que foi carregado antes da pagina ter sido renderizada.

carregue sua lista no construtor do bean, deve resolver, não me pergunte porque ele testa isso, tive que dar um no em poingo d’agua, pois tive que fazer dois combos um passando valor para o outro e me bati com isso, quando submetia o combo estava com valores diferentes dos que foram para eles carregados.

BIZARRO! :shock:

Bizarro sim… tá com a maior kra de ser BUG!

O estranho é que o código HTML que ele renderiza vem com os valores corretos - cada “input type radio” com um valor diferente, representando uma opção. Quando o JSF chama o método setId() do OpcaoBean (via atributo value da tag h:selectOneRadio), o parâmetro vem NULO! :evil:

Coisa de outro mundo… :cry:

Rodrigo