JSF - a4j:commandButton + immediate="true"

9 respostas
F

Pessoal,
estou criando um formulário em JSF, utilizando os componentes do richfaces e ajax4j.
E neste formulário tenho um botão “Cancelar” e também um campo que só pode receber valores numéricos.

Então se eu coloco um valor de caractere neste campo e clico em cancelar, é validado o formulário e apresenta uma mensagem informando que o campo só pode receber valores numéricos.

A solução para isto foi colocar a propriedade immediate=“true” no a4j:commandButton. Agora esta validação não é mais feita, mas o problema é que quando clico no botão cancelar, está entrando no método do bean, faz o que tem que fazer, mas a tela não é atualizada. Somente está atualizando os campos readonly e os campos que não são readonly não está sendo atualizado.

Alguem sabe o que estou fazendo de errado?

9 Respostas

febatata

E ai. Já conseguiu resolver esse problema?

Cara, eu acho que se você colocar a opção bypassUpdates=“true” no seu componente, ele vai deixar de atualizar o “model”.

Testa aí e depois dê um feedback.

F

Felipe,
não consegui resolver ainda.
Fiz o teste, coloquei bypassUpdates=“true” mas o comportamento é o mesmo.

febatata

Então. Eu não entendi direito o comportamente deste botão cancelar.
O que você precisa fazer?
dê um pouco mais de detalhes pra poder tentar ajudar.

maurenginaldo

famp:
Pessoal,
estou criando um formulário em JSF, utilizando os componentes do richfaces e ajax4j.
E neste formulário tenho um botão “Cancelar” e também um campo que só pode receber valores numéricos.

Então se eu coloco um valor de caractere neste campo e clico em cancelar, é validado o formulário e apresenta uma mensagem informando que o campo só pode receber valores numéricos.

A solução para isto foi colocar a propriedade immediate=“true” no a4j:commandButton. Agora esta validação não é mais feita, mas o problema é que quando clico no botão cancelar, está entrando no método do bean, faz o que tem que fazer, mas a tela não é atualizada. Somente está atualizando os campos readonly e os campos que não são readonly não está sendo atualizado.

Alguem sabe o que estou fazendo de errado?

Já passei exatamente pelo mesmo problema com vc. Na época não consegui resolver e acabei dando uma outra solução.
Se o seu cancelar serve para limpar a tela, utilize ele como h:commandButton com o type=“reset”, agora se ele executa outras tarefas, tem que pensar em outra solução.

F

É o seguinte,
este é um formulário de cadastro, estou em um determinado registro, então altero alguns campos e se clico em cancelar, o registro é retornado da base novamente e a tela deve ser atualizada.

Exemplo: Usuário entra na tela, navega para um registro, altera um campo numérico para um valor String. Se ele tentar salvar vai aparecer a mensagem informando que este campo não pode ser uma String. Então neste momento ele vai clicar em cancelar e esta validação não pode acontecer neste momento.

F

Já passei exatamente pelo mesmo problema com vc. Na época não consegui resolver e acabei dando uma outra solução.
Se o seu cancelar serve para limpar a tela, utilize ele como h:commandButton com o type=“reset”, agora se ele executa outras tarefas, tem que pensar em outra solução.

Já fiz o teste com o h:commandButton e funciona. Mas o problema é que com h:commandButton não vai funcionar direito dentro de um modalPanel. Quando clico no botão o modalPanel é fechado, por isso estou utilizando o a4j:commandButton.

maurenginaldo

Mas o que exatamente vc quer fazer ao clicar no botão cancelar?

F

É para desfazer as alterações do usuário na tela. Quando clicado neste botão, o registro atual é retornado da base e os campos são atualizados na tela.

maurenginaldo

Pelo que entendi, quando vc vai incluir ou alterar um registro vc clica em um botão que abre um modal panel com os botões salvar e cancelar, certo?

E vc me disse que no clique do cancelar o modalPanel fecha.
Não seria esse o propósito?

Criado 4 de julho de 2008
Ultima resposta 4 de jul. de 2008
Respostas 9
Participantes 3