Retorno de Erro para pagina anterior

Pessoal, estou estudando MVC e surgiu uma dúvida. Tenho a pagina JSP que envia as informações para o Servlet para fazer os requests, as validações e chamar os metodos de gravação no banco de dados… Se ocorrer um erro ou uma inconsistencia que impeça de prosseguir tenho que voltar para o JSP e informar ao usuário qual o problema.

Qual a melhor maneira de se fazer isso ? (Não estou utilizando nenhum framework web)

[]'s

Luis Cesar

[quote=luiscesarinfo]Pessoal, estou estudando MVC e surgiu uma dúvida. Tenho a pagina JSP que envia as informações para o Servlet para fazer os requests, as validações e chamar os metodos de gravação no banco de dados… Se ocorrer um erro ou uma inconsistencia que impeça de prosseguir tenho que voltar para o JSP e informar ao usuário qual o problema.

Qual a melhor maneira de se fazer isso ? (Não estou utilizando nenhum framework web)

[]'s

Luis Cesar[/quote]

Amigo, creio que se você voltar para a mesma JSP não terás MVC, pois acredito que vai precisar usar o PrintWriter para escrever HTML. Dessa forma, morreu o MVC.

Creio que a melhor abordagem seria você fazer um RequestDispatcher para uma página de erro. Eu utilizo páginas de erro bem específicas para cada Exception (Não sei se é uma boa idéia, mas informa bem =) ). Erros de validação, login, etc. eu aconselharia o uso do DWR. Acho que fica bem elegante.

Bem, acho que é isso.

Abraços

Obrigado ao celso.martins pela resposta.

Mais alguem tem uma suguestão ou dica ?

Bom acho que você quer uma reposta objetiva…bom então ai vai.

Eu utilizo uma classe java onde eu instancio ela a cada vez que quero mostrar uma mensagem…segue exemplo
[color=darkred]------------------------------------------
Classe VOMensagem

import java.io.Serializable;
import model.vo.*;
public class VOMensagem implements Serializable {

private static final long serialVersionUID = 1L;

private String mensagem;
private String img_mensagem;

public void setMensagem(String mensagem) { this.mensagem = mensagem; }
public void setImg_mensagem(String img_mensagem) {this.img_mensagem = img_mensagem;	}

public String getMensagem() { return mensagem; }
public String getImg_mensagem() { return img_mensagem; }

}
[/color]

Ai no método de validação e persistência eu faço o seguinte:

[color=red]public String save() {
VOMensagem vOMensagem = (VOMensagem) FacesContext.getCurrentInstance().getApplication().getExpressionFactory().createValueExpression(
FacesContext.getCurrentInstance().getELContext(), vOMensagem, Object.class).getValue(
FacesContext.getCurrentInstance().getELContext());

    DaoExemplo exemploDao = new DaoExemplo();
    try{
         exemploDao.save(exemplo);
         //persista os dados aqui.
         //Ex. Hibernate
         HibernateUtility.commit();
         vOMensagem.setImg_mensagem("imagens/salvo.gif");
         vOMensagem.setMensagem("Registro salvo com sucesso!");             
    } catch (Exception ex) {
         ex.printStackTrace();
         vOMensagem.setImg_mensagem("imagens/erro.gif");
         vOMensagem.setMensagem("Erro na validação!");             
    }
    return null;

}[/color]

Ai vc tem que fazer o seguinte no JSP.
[color=red]…

<t:panelGrid align=“center”>
<h:commandButton action="#{actMetodo.save}" image="/pages/imagens/salvar.jpg" />
<t:panelGrid align=“center” styleClass=“txtCentro” columns=“2” rendered="#{! empty vOMensagem.mensagem}">
<h:graphicImage value="#{vOMensagem.img_mensagem}" />
<h:outputText value="#{vOMensagem.mensagem}" style=“vertical-align: middle;” styleClass=“txtVermelho3”/>
</t:panelGrid>
</t:panelGrid>


[/color]

actMetodo = classe java de persistência e validação.

Não esqueca de colocar a classe actMetodo no facesconfig.xml.

Espero que possa ter te ajudado.
Boa programação.

[quote=jimjr_ivan]Bom acho que você quer uma reposta objetiva…bom então ai vai.

actMetodo = classe java de persistência e validação.

Não esqueca de colocar a classe actMetodo no facesconfig.xml.

Espero que possa ter te ajudado.
Boa programação.[/quote]

Amigo, só um pitaco, me permita. :wink:

Me parece que o seu exemplo é com JSF e o amigo não está usando Framework MVC, assim como eu, ainda. =)

Ainda estou estudando o Struts e o JSF e ainda não me sinto seguro para usar. Por isso ainda utilizo esta abordagem.

P.S. Creio que a minha resposta tenha sido direta. Só não dei o peixe, ensinei o caminho do local da pesca e qual vara usar. =) Acho que assim vai ajuda-lo a fixar os conceitos.

P.S. 2 -> Luis, se ainda está com dificuldades dá uma olhada nos tutoriais do GUJ sobre servlets e também na API do Java. Te garanto uma coisa, vai ser melhor assim do que eu postar o código para você. :wink:

Abraços e boa sorte

[quote=luiscesarinfo]Pessoal, estou estudando MVC e surgiu uma dúvida. Tenho a pagina JSP que envia as informações para o Servlet para fazer os requests, as validações e chamar os metodos de gravação no banco de dados… Se ocorrer um erro ou uma inconsistencia que impeça de prosseguir tenho que voltar para o JSP e informar ao usuário qual o problema.

Qual a melhor maneira de se fazer isso ? (Não estou utilizando nenhum framework web)

[]'s

Luis Cesar[/quote]

Kara tenho 1 coisa super simpres q eu uso em JSTL:

No servlet quando der algum erro la no catch vc coloca assim:

try{
...
} catch(Exception ex) {
       response.sendRedirect("pagina.jsp?val=true&msg="+ex);
}

vc coloca a pagina q vc quer, “val” será a variavel q comanda aparecer ou não mensagem de erro na pagina anterior, e “msg” é a mensagem de erro q vc quer retornar.

ai na sua jsp vc coloca assim dentro do body:

<label style="color:#FF0000">
          <strong>
               <c:if test="${param.val}">
                       <div align="center">${param.msg}</div>
               </c:if>
          </strong>
</label>

esse código ta dizendo q vc vai colocar 1 label oculto em algum lugar da sua pagina… (ai vc define…xD)
e quando ele retornar passando o parametro pela URL e o val for igual a true ele mostra a mensagem ^^

não sei se vc queria a resposta dessa forma, + se entendi bem o seu problema, isso resolve perfeitamente, e vc n prescisa importar nada.

qualquer coisa estamos ai ^^

1 - jimjr_ivan = Muito obrigado pelo post, mas ainda não estou usando nenhum framework MVC, possivelmente vou ingressar no JSF, mas ainda estou colhendo material para estudo.

2 - celso.martins = Entendi sua intenção e utilizei o seu post inicial para minha pesquisa e foi muito util. Apenas queria saber se mais alguem tinha outra sugestão como foi o caso do roberiomatos.

3 - roberiomatos = gostei da sua solução. Vou ver o qual será melhor no meu caso. Qquer coisa mando uma mensagem para vc pedindo outra dica.

no mais muito obrigado a todos. e se mais alguem tiver outra sugestão, posta ai. :stuck_out_tongue:

[]’ Luis Cesar

roberiomatos: Olha só, seu exemplo funcionou perfeitamente, mas com um probleminha : o formulário está voltando vazio. Estou começando com JSTL agora e gostaria de saber o que eu posso fazer para que o formulário volte com os dados que foram enviados.

[]'s Luis Cesar

é so vc passar por parametro na URL as informações pro seu servlet, e quando vc for retorar o erro vc manda os valores juntos, tipo assim:


String teste = request.getParameter("VAR");

try {
...
} catch (Exception ex) {
      response.sendRedirect("pagina.jsp?val=true&msg=Sua Mensagem&VAR="+teste);
}

desta forma vc vai esta passando pra sua pagina JSP o valor q o servlet recebeu, concatenando as variaveis da URL com o “&”;
^^

qualquer duvida so mandar msg

ah… blz…

imaginei que teria uma forma melhor de fazer isso usando useBean.

mas muito obrigado pela atenção…

[]'s Luis Cesar

bem não q eu saiba… xD

  • se vc axa alguma coisa posta ai… ^^