O primeiro deles trago o valor do banco por um Bean.
O segundo trago o valor dependente do valor escolhido no primeiro.
Até ai tudo bem, mil maravilhas exibindo na tela e tudo mais.
O problema é quando envio essa informação, o segundo h:selectOneMenu
foi populado ou reescrito pelo JavaScript que escrevi na mão.
Os valores estão corretos tanto o value com o label, mais o JSF dispara:
sourceId=j_id15:razaoSocial[severity=(ERROR 2), summary=(: Validation Error: Value is not valid), detail=(: Validation Error: Value is not valid)]
Estou a 2 dias quebrando a cabeça, já mandaram sobreescrever HashCode, Equals e toString, já fiz tudo isso e nada.
Porque não estou escrevendo o valor desse selectOneMenu por nenhum backbean e sim pelo javascript.
Você pode fazer tudo no cliente (browser) através de javascript, mas isso não diz nada ao JSF já que você não está alterando o estado dos componentes na árvore (UIViewRoot), isto é, o estado dos componentes está no servidor.
Vamos para um exemplo prático:
Se você entra numa página onde um h:inputText é gerado como readonly=“true”, mesmo que você via javascript mude para readonly=“false”, ao submeter o formulário o JSF irá garantir que este componente (h:inputText) não será alterado pois o componente continua com o mesmo estado no servidor, isto é, readonly=“true”.
Deu para entender?
Neste teu caso é aconselhado você utilizar o Richfaces/Ajax4jsf, pois assim ele efetuará uma requisição ao servidor e alterará o estado do componente no servidor.
Pesquisei horas e horas no Google e já li esse texto do seu Blog umas 50 vezes hehe.
No backbean tentei sobreescrever Equals(), HashCode() e toString()
Mais acho que o que fiz está um pouco diferente né, pq os dados vem exclusivamente do JavaScript
e o JSF não está conseguindo lê-los.
Não existe solução a não ser usar RichFaces?
Não tem como eu implementar um Conversor que lê os dados que o JavaScript trouxe ou pelo menos
o que eu postei?
[quote] Pesquisei horas e horas no Google e já li esse texto do seu Blog umas 50 vezes hehe.
No backbean tentei sobreescrever Equals(), HashCode() e toString() [/quote]
rss… legal :lol: Mas o problema que está ocorrendo do “is not valid” é explicado no post, como você monta o componente sem nenhum valor (f:selectItem) o JSF não aceita teu valor como válido, logo ocorre o erro de validação. Isso tem a ver com segurança.
[quote] Mais acho que o que fiz está um pouco diferente né, pq os dados vem exclusivamente do JavaScript
e o JSF não está conseguindo lê-los. [/quote]
Exatamente! Como você está gerando as opções através de javascript, ou seja, no cliente, o estado do componente (h:selectOneMenu) no servidor continua como se não houvesse nenhum f:selectItem associado ao componente.
Sim, existem várias. Como utilizar Trinidad ou Myfaces Sandbox ou IceFaces ou DWR ou mesmo outro framework que te permita atualizar o estado do componente no servidor. Mas com certeza hoje em dia o Ajax4jsf é a melhor opção.
[quote]
Não tem como eu implementar um Conversor que lê os dados que o JavaScript trouxe ou pelo menos
o que eu postei?[/quote]
Não, não tem. Não é este o objetivo de um Converter.
Enfim, aconselho-te a aderir ao Ajax4jsf, ele é bem simples e prático. Até a configuração do mesmo é trivial. Vale a pena utiliza-lo.
Abraços e boa sorte.
Na verdade não é que JSF não seja produtivo para iniciantes, longe disso É que a maioria dos desenvolvedores web são acostumados a desenvolver sistemas “action-like”, diferentemente de JSF que se utiliza de “component-like”, difere um pouco, por isso a confusão de inicio, eu passei por isso também logo que comecei com JSF.
As vezes penso que um desenvolvedor Swing que nunca trabalhou com desenvolvimento web tenha uma curva de aprendizagem menor que um desenvolvedor web vindo do Struts, por exemplo. Bem, é o que imagino.