[RESOLVIDO]VRaptor 2.6.0 (perda de dados digitados no JSP após uma validação com resultado inválido)

4 respostas
softwork

Pessoal, tenho um sistema utilizando o vRaptor 2.6.0 com Hibernate 3.5.5 rodando sob um Tomcat 6.0.29.

Sei que no VRaptor 3 não existe o problema de perda de dados digitados após uma validação, mas a migração será de grande impacto e o custo muito alto, inviabilizando o processo, então…

Gostaria de saber se alguém possui uma solução para manter os dados que foram digitados ao encaminhar através do SUBMIT para validação numa determinada lógica, ou seja:

Numa tela de cadastro contendo vários campos tenho uma prévia validação Javascript, porém ao clicar no botão SALVAR, este dados são encaminhados para um “validateSalvar(ValidationErrors errors)”, sendo que neste local todos os dados são validados antes de permitir que a lógica Salvar seja chamada efetivamente, pois se houver qualquer erro eu adiciono mensagens no parâmetro errors, para que sejam apresentados ao usuário para correção. Mas após a apresentação destas mensagens é feito um retorno para a tela de cadastro e TODOS OS DADOS digitados não existem mais, complicando assim a vida do pobre usuário que deverá digitar tudo novamente.

Existe alguma técnica para solucionar este impasse ?

Obrigado.

4 Respostas

Lucas_Cavalcanti

se vc usar um forward ao invés de um redirect vai funcionar…

no views.properties, faça algo assim:

controller.logica.invalid=outra.logica.logic
softwork

Boa tarde, Lucas.

no meu views.properties está assim:

colaborador.novo.ok        /WEB-INF/jsp/colaborador/formulario.jsp
colaborador.edita.ok        /WEB-INF/jsp/colaborador/formulario.jsp
colaborador.salva.ok        redirect:colaborador.lista.logic
colaborador.salva.invalid  /WEB-INF/jsp/informacoes/warning.jsp

Sendo assim quando o salvar for “inválido” a página warning.jsp será chamada e lá eu percorro toda a lista errors apresentando as mensagens de erro.

Nesta página warning.jsp eu tenho o seguinte código:

<META HTTP-EQUIV='refresh' CONTENT='8;URL=javascript: botaoRetornar();'>

<script type="text/javascript">
    function botaoRetornar() {
        window.history.back();
    }
</script>

Ou seja, nesta página existe um botão VOLTAR, porém se o usuário não clicar dentro de 8 segundos ele irá retornar para a tela anterior automaticamente.

Nota: A página /WEB-INF/jsp/informacoes/warning.jsp é genérica para todos os .invalid do meu sistema.

Obrigado e fico no aguardo de orientações…

Lucas_Cavalcanti

no .invalid vc deveria voltar para o jsp do formulario, daí vc consegue recuperar os dados usando:

<input type="text" name="bolinha.cor" value="${bolinha.cor}" />
softwork

Valeu Luca, eu entendi…

Porém gostaria de saber se nesta página warning.jsp eu consigo saber a URL de quem a chamou, algo do tipo:

${pageContext.request.header.referer} ou <%= request.getHeader(“referer”); %>

Ou até mesmo algum atributo no DOM que possua a URL completa.

Isto iria me facilitar a vida pois eu poderia colocar no javascript um redirecionamento justamente para a página anterior, algo como:

window.location.href = URL.referer

Pois tenho muitas telas no sistema e fazer uma mudança seria terrível.

Obrigado.

***** EDITADO *****

Consegui resolver utilizando desta forma:

&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%&gt;
&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%&gt;

&lt;META HTTP-EQUIV='refresh' CONTENT='8;URL=javascript: botaoRetornar();'&gt;

&lt;script type="text/javascript"&gt;

    function botaoRetornar() {
        window.location='&lt;%= request.getHeader("Referer") %&gt;';
        //window.history.back();
    }
    
&lt;/script&gt;

Pelo que entendi é case-sensitive! rs…rs…rs…

Ficou show de bola, agora não perco mais os dados digitados e não tive que fazer uma mudança com grande impacto.

Muito obrigado pelas dicas…

Criado 29 de agosto de 2010
Ultima resposta 31 de ago. de 2010
Respostas 4
Participantes 2