JSF: Problema no botão cancelar com ajax [RESOLVIDO]  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
valdair.mts
Thread.start()

Membro desde: 06/04/2009 22:23:05
Mensagens: 46
Localização: Braço do Norte/SC
Offline

O usuário digita um valor inválido no campo inpFilterValue e clica no botão Salve, o que vai disparar a validação e a mensagem de validação será exibida.
Então o usuário clica no botão Cancelar para descartar as alterações, o comportamento desejado é que os valores voltem ao estado original (ou em branco no caso de inclusão).
Porém devido a validação previamente executada, o valor incorreto é mantido no campo que estava inválido.
Vejam que o botão Cancelar foi configurado para não processar outros componentes. Isto funciona, desde que o usuário não tenha clicado no botão salvar previamente.

This message was edited 1 time. Last update was at 08/02/2012 07:04:57

Diego Adriano
JavaEvangelist
[Avatar]

Membro desde: 27/01/2010 11:48:28
Mensagens: 371
Localização: Extrema - MG
Offline

Coloca o ajax




[Email] [MSN]
mrbbm
JavaChild

Membro desde: 16/12/2009 14:49:58
Mensagens: 125
Offline

Já passei por situação similar.
No meu caso eu validava na própria página com campos requeridos (required="true").

Então ao editar o formulário, clicar em Salvar e reprovar na validação, mesmo que eu quisesse cancelar a operação posteriormente o objeto parecia não sair daquele estado de validação. A página ficava trancada, o load e nem o new no objeto não funcionavam.

"Resolvi" dando refresh na página (submit) para forçar a saída daquele estado.
DarthCego
Debugger
[Avatar]

Membro desde: 05/01/2012 19:11:17
Mensagens: 64
Localização: Presidente Prudente - SP
Offline

Ola amigo

Tente por o immediate="true" no seu botao cancelar
valdair.mts
Thread.start()

Membro desde: 06/04/2009 22:23:05
Mensagens: 46
Localização: Braço do Norte/SC
Offline

Olá Diego,

Vlw, mas o problema persiste com a alteração abaixo. Desta forma, mesmo com o estado válido ao cancelar os dados são mantidos no componente.


e nem assim:


também não assim:



Ainda, eu prefiria fazer isso usando ajax para não precisar renderizar toda a view.
valdair.mts
Thread.start()

Membro desde: 06/04/2009 22:23:05
Mensagens: 46
Localização: Braço do Norte/SC
Offline

DarthCego wrote:Ola amigo

Tente por o immediate="true" no seu botao cancelar


Vlw colega, mas já está desta forma.
valdair.mts
Thread.start()

Membro desde: 06/04/2009 22:23:05
Mensagens: 46
Localização: Braço do Norte/SC
Offline

mrbbm wrote:Já passei por situação similar.
No meu caso eu validava na própria página com campos requeridos (required="true").

Então ao editar o formulário, clicar em Salvar e reprovar na validação, mesmo que eu quisesse cancelar a operação posteriormente o objeto parecia não sair daquele estado de validação. A página ficava trancada, o load e nem o new no objeto não funcionavam.

"Resolvi" dando refresh na página (submit) para forçar a saída daquele estado.


Pode ser uma solução, mas aí também encontrei uma solução alternativa, que vou adotar caso não solucione de outra forma: retornar uma mensagem FacesMessage.SEVERITY_WARN ao invés FacesMessage.SEVERITY_ERROR e controlar a validação do campo no bean, inclusive o required. Desta forma não deixou a view em estado inválido.

Mesmo assim aceito sugestões para corrigir de uma menos "alternativa".
lordaj
HelloWorld
[Avatar]

Membro desde: 07/05/2007 12:08:13
Mensagens: 10
Offline

só o process="@this" update="@form" já é suficiente pra fazer funcionar.. eu uso e funciona perfeito, use actionListener em vez de action, tira esse disabled por enquanto e testa..

<p:commandButton id="btnCancel" value="Cancel"
process="@this" update="@form"
icon="ui-icon ui-icon-circle-check" title="Cancelar"
actionListener="#{targetBean.filterEditor.cancel}" />


tente assim..


mas verifica tb se as tags tão certas..

<h:body>
<f:view>
<h:form prependId="false" >


</h:form>
</f:view>
</h:body>

This message was edited 1 time. Last update was at 07/02/2012 14:53:35


valdair.mts
Thread.start()

Membro desde: 06/04/2009 22:23:05
Mensagens: 46
Localização: Braço do Norte/SC
Offline

lordaj wrote:só o process="@this" update="@form" já é suficiente pra fazer funcionar.. eu uso e funciona perfeito, use actionListener em vez de action, tira esse disabled por enquanto e testa..

<p:commandButton id="btnCancel" value="Cancel"
process="@this" update="@form"
icon="ui-icon ui-icon-circle-check" title="Cancelar"
actionListener="#{targetBean.filterEditor.cancel}" />


tente assim..


mas verifica tb se as tags tão certas..

<h:body>
<f:view>
<h:form prependId="false" >


</h:form>
</f:view>
</h:body>


Acredito que tem razão sobre os atributos process e update, BalusC explica aqui:
http://stackoverflow.com/questions/7708041/jsf-immediate-true-for-cancel-button-doesnt-work

Com relação ao disabled, não é o problema. E as tags estão corretas. Vlw lordaj.

Bem, acho que vou "resolver" com a solução "alternativa", que comentei antes, que está com gerando o comportamento que desejo.
mrbbm
JavaChild

Membro desde: 16/12/2009 14:49:58
Mensagens: 125
Offline

valdair.mts wrote:
mrbbm wrote:Já passei por situação similar.
No meu caso eu validava na própria página com campos requeridos (required="true").

Então ao editar o formulário, clicar em Salvar e reprovar na validação, mesmo que eu quisesse cancelar a operação posteriormente o objeto parecia não sair daquele estado de validação. A página ficava trancada, o load e nem o new no objeto não funcionavam.

"Resolvi" dando refresh na página (submit) para forçar a saída daquele estado.


Pode ser uma solução, mas aí também encontrei uma solução alternativa, que vou adotar caso não solucione de outra forma: retornar uma mensagem FacesMessage.SEVERITY_WARN ao invés FacesMessage.SEVERITY_ERROR e controlar a validação do campo no bean, inclusive o required. Desta forma não deixou a view em estado inválido.

Mesmo assim aceito sugestões para corrigir de uma menos "alternativa".


Eu resolvi assim, tratando no Bean, inclusive os required. E em conjunto com Ajax nem é preciso dar refresh na página.
Funciona perfeitamente.
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team