Carregar JSP de acordo com o parametro passado

10 respostas
B

Pessoal,

Estou com uma dúvida e preciso muito da ajuda de vocês, eu tenho um JSP chamada perfil (perfil.jsp) e gostaria que a mesma carregasse as informacoes do usuário quando eu passasse, por exemplo: perfil.jsp?id=1 e ele carregasse diretamente as informações do usuário. como eu posso fazer isso?

eu consigo passando para o servlet diretamente, mas gostaria que o jsp chamasse o servlet “internamente” e completasse a página

Alguma ideia?

Resumindo: eu preciso enviar um parâmetro que indica o usuário para uma servlet. A servlet busca os dados, carrega os dados em atributos e retorna para a JSP.

Obrigado

10 Respostas

B

qual a melhor maneira de fazer isso?

WRYEL

A melhor maneira de fazer o que você citou, é de fato passando pelo Servlet antes (Leia sobre MVC).

ex:

public void doGet(HttpServletRequest request, HttpServletResponse response) {
      UsuarioModel UsuarioModel = new UsuarioModel(); // dentro dele, você acessa o seu DAO ... new UsuarioDAO(); ...
      Usuario usuario = usuarioModel.findById(Integer.parseInt(request.getParameter("id")));
      request.setAttribute("usuario", usuario);
      request.getRequestDispatcher("suaJSP.jsp").forward(request, response);
}

no seu jsp:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:out value="${usuario.nome}" />

[]'s

B

então deveria ser assim o fluxo: chamar o servlet diretamente passando o ID, e, em seguida, o servlet redireciona para o JSP?

eu não devo acessar um JSP antes de um Servlet?

porque dessa maneira eu chamo o servlet direto…

B

alguem? não consigo encontrar exemplos assim…

F

WRYEL:
A melhor maneira de fazer o que você citou, é de fato passando pelo Servlet antes (Leia sobre MVC).

ex:

public void doGet(HttpServletRequest request, HttpServletResponse response) {
      UsuarioModel UsuarioModel = new UsuarioModel(); // dentro dele, você acessa o seu DAO ... new UsuarioDAO(); ...
      Usuario usuario = usuarioModel.findById(Integer.parseInt(request.getParameter("id")));
      request.setAttribute("usuario", usuario);
      request.getRequestDispatcher("suaJSP.jsp").forward(request, response);
}

no seu jsp:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:out value="${usuario.nome}" />

[]'s

o que vc quer mais além desse exemplo?

rsrsrsr

B

nesse exemplo eu acesso direto Servlet e depois ele me manda pra JSP.

o certo não seria uma JSP chamar o serlvet e depois retornar uma jsp?

F

isso…sua jsp, vai chamar a servlet e vai retornar…

brunojf

Você também pode usar um AJAX no onRead que chama o controlador e carrega tudo antes e vc seta as informações na página .
Isso vai resolver o “problema” de não chamar o servlet de cara.

WRYEL

Model (Classe java de negócio)
View (JSP)
Controller (Classe java - Servlet)

Sua View manda dados para o Controller, que toma decisões de acordo com os dados recebidos da View.
Seu Controller aciona seu Model passando os dados que são necessários para executar a ação.
Seu Controller recebe recebe do model o resultado da ação acionada.
Seu Controller encaminha o resultado para a View (Jsp)

baseado nas ideias acima, suponha que você tenha um servlet UsuarioController mapeado para: /usuarioController, logo, seu link poderia ser:

/usuarioController?acao=info&id=10
/usuarioController?acao=delete&id=20

seria algo como:

public class UsuarioController extends HttpServlet {
     public void doGet(HttpServletRequest request, HttpServletResponse response) {
          String acao = request.getParamater("acao");
          if ("info".equals(acao)) {
               UsuarioModel UsuarioModel = new UsuarioModel(); // dentro dele, você acessa o seu DAO ... new UsuarioDAO(); ...  
               Usuario usuario = usuarioModel.findById(Integer.parseInt(request.getParameter("id")));  // acao de negócio
               request.setAttribute("usuario", usuario); // atributo para view ...
               request.getRequestDispatcher("informacoesUsuario.jsp").forward(request, response);  //encaminha para a View responsavel
          } else if("delete".equals(acao)) {
               UsuarioModel UsuarioModel = new UsuarioModel(); // dentro dele, você acessa o seu DAO ... new UsuarioDAO(); ...  
               usuarioModel.deleteById(Integer.parseInt(request.getParameter("id")));  // acao de negócio
               request.setAttribute("mensagem", "Usuario deletado com sucesso");  // atributo para view ... 
               request.getRequestDispatcher("usuarioDeletado.jsp").forward(request, response);  //encaminha para a View responsavel
          } 
     } 
}

ficou mais claro agora ? :slight_smile:

B

muito obrigado. ficou mais claro!

então quando eu tenho uma aplicação com um link fixo (no caso o perfil de um usuario), o link de acesso sempre vai ser o servlet direto? pois eu preciso carregar a pagina na hora… nao existe um JSP antes, só após o servlet?

achava que eu precisava ter um jsp que chamasse o servlet sempre.

Criado 17 de junho de 2012
Ultima resposta 18 de jun. de 2012
Respostas 10
Participantes 4