JSF 2 só funciona no segundo clique

Pessoal, quando tenho alguma view que seja ViewScoped ela só funciona após o segundo clique. Alguém sabe como resolver o problema?

[quote=SpyJavDev]Pessoal, quando tenho alguma view que seja ViewScoped ela só funciona após o segundo clique. Alguém sabe como resolver o problema?[/quote]Até onde sei isso acontece por algum erro de programação que está sendo “mascarado”.

Faça um teste primeiro. Crie uma página que só tenha um botão e aponte para um view scoped MB e veja c vai no segundo clique.

O que você pode fazer é retirar os componentes e ir adicionando um a um até achar qual componente está dando o erro.

Muito estranho, criei duas páginas em branco, apenas com menu. Uma request e outra view. quando entro na request eu clico em qualquer item do menu e sou redirecionado na mesma hora. Quando entro na view, se eu clicar em outra view nao adianta nada, só funciona a partir do segundo clique. Porém da página view eu consigo ir imediatamente se clicar em algum item do menu que seja request.

Posso estar enganado, mas há outros tópicos aqui com o mesmo problema, e se não me engano o erro se dá quando está sendo utilizado botão ajax para chamar algo que deveria ser action por exemplo algo que mude de pagina, ou botão action onde deveria ser actionListener para uma chamada ajax(que não mude de tela).

Estou testando utilizando action para mudar de página. O problema ocorre justamente quando clico na action que chama um método com retorno String para a página seguinte. O erro ocorre quando entro em uma página vinda de um bean viewscoped e faço um action para ou bean viewscoped. Nas outras situações o problema não ocorre.

[quote=SpyJavDev]Estou testando utilizando action para mudar de página. O problema ocorre justamente quando clico na action que chama um método com retorno String para a página seguinte. O erro ocorre quando entro em uma página vinda de um bean viewscoped e faço um action para ou bean viewscoped. Nas outras situações o problema não ocorre.[/quote]Colocou no menu ajax=“false”?

Poste o código por favor.

estava enganado, na verdade o problema ocorre quando navego por mais de um action. no menu tenho chamadas por action e por url. Url funciona bem, já a action não.

Não funciona bem:
<p:menuitem value=“Máquinas” action="#{maquinaBean.listarMaquinas}" />
Funciona bem:
<p:menuitem value=“Máquinas” url="/paginas/listaMaquinas.xhtml" />

Gostaria de entender o motivo para saber as limitações, afinal, ao longo do desenvolvimento não terei como fugir das actions.

[quote=SpyJavDev]estava enganado, na verdade o problema ocorre quando navego por mais de um action. no menu tenho chamadas por action e por url. Url funciona bem, já a action não.

Não funciona bem:
<p:menuitem value=“Máquinas” action="#{maquinaBean.listarMaquinas}" />
Funciona bem:
<p:menuitem value=“Máquinas” url="/paginas/listaMaquinas.xhtml" />

Gostaria de entender o motivo para saber as limitações, afinal, ao longo do desenvolvimento não terei como fugir das actions.[/quote]Leia aqui a diferença entre action e actionsListener: JSF Mini Livro - Dicas, conceitos e boas práticas.

Uma coisa que você precisa ter em mente, os componentes do primefaces vem sempre com ajax=“true”. Action e ajax não combinam, se for utilizar action, utilize com ajax=“false”

Obrigado pela dica Hebert, vou dar uma lida depois com mais calma. E se eu chegar a outras conclusões vou postando aqui para compartilhar o conhecimento.

[quote=Hebert Coelho][quote=SpyJavDev]estava enganado, na verdade o problema ocorre quando navego por mais de um action. no menu tenho chamadas por action e por url. Url funciona bem, já a action não.

Não funciona bem:
<p:menuitem value=“Máquinas” action="#{maquinaBean.listarMaquinas}" />
Funciona bem:
<p:menuitem value=“Máquinas” url="/paginas/listaMaquinas.xhtml" />

Gostaria de entender o motivo para saber as limitações, afinal, ao longo do desenvolvimento não terei como fugir das actions.[/quote]Leia aqui a diferença entre action e actionsListener: JSF Mini Livro - Dicas, conceitos e boas práticas.

Uma coisa que você precisa ter em mente, os componentes do primefaces vem sempre com ajax=“true”. Action e ajax não combinam, se for utilizar action, utilize com ajax=“false”[/quote]
+1

meu projeto está começando ainda. Basicamente vou tentar sempre redirecionar utilizando url para evitar o ajax na troca de páginas e vou tentar trabalhar com os beans todos em requestscoped. Pelo que estou vendo essas são boas práticas que podem evitar problemas no ciclo de vida dos beans pelo menos nas operações básicas.