Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

carregar informações pra outra view

Boa tarde, estou fazendo um projeto para informação de pedidos de venda, eu tenho dois bancos de dados, um para fazer o login que é o Mysql, e o outro é o banco do sistema da onde vou tirar as informações que vou mostrar nas Views, No banco Oracle eu tenho os chamados "Agentes" nesssa tabela existe os representantes, que vão se logar na aplicação usando o ID deles que seria o codigo e o email deles, no banco Mysql, cadastrei todos eles com as mesma informações do Oracle pra na hora de fazer consultas e trazer na tela eu usar o ID, eu tenho uma Servlet de login

package br.tonbras.servlet;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import br.tonbras.dao.AgentesDao;
import br.tonbras.models.Agentes;

@WebServlet(urlPatterns = "/paginas/login")
public class Login extends HttpServlet {


    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        String senha = req.getParameter("senha");
        String email = req.getParameter("email");


        AgentesDao dao = new AgentesDao();

        Agentes agentes = dao.login(email, senha);
        if (agentes.getSenha() == null) {
            RequestDispatcher requestDispatcher = req.getRequestDispatcher("/WEB-INF/paginas/UsuarioNaoExiste.html");
            requestDispatcher.forward(req, resp);

        } else {
            HttpSession session = req.getSession();
            session.setAttribute("usuario.logado", agentes);
            req.setAttribute("agentes", agentes);
            RequestDispatcher requestDispatcher = req.getRequestDispatcher("/WEB-INF/paginas/UsuarioLogado.jsp");
            requestDispatcher.forward(req, resp);
        }
    }
}

eu quero saber como posso carregar o ID do cara que se logar pra eu fazer alguma coisa como botões, tipo pedidos em aberto, na hora que ele aperta esse botão de alguma forma eu enviar o id dele pro select que vai fazer essa pesquisa.

isso é possivel ?

obrigado gente

8 respostas

E aí, Gabriel, tudo certo? =)

Se você quer enviar alguma informação saindo da sua Servlet para sua View, você pode usar o request.setAttribute(), como já está fazendo... Com isso, você está disponibilizando o objeto todo na próxima camada.

No seu caso, o objeto agentes é o que está sendo disponibilizado. Ele possui o ID que você está querendo? Se ele tiver, você consegue ter acesso através da Expression Language, por exemplo:

${agentes.id}

Só lembra que ela buscará pelo getId() dessa forma... =)

Fábio

Fabio tudo certo e com vc?

acho q eu nao expliquei direito, pela sua resposta percebi que vou enviar pra outra servlet nao so pra view, vai haver uma tela de login, nessa tela o usuario digita o seu id e senha, eu vou receber isso na servlet login, se o login se confirmar ele vai pra outra tela, nessa tela vai haver pro exemplo um botão pedidos, quando ele clicar , por tras acontece o "select pedido from pedidos where id = " + "ID" esse id tem que ser o mesmo da tela de login, (esse select é apenas um exemplo ta) pelo req.getAttribute(); que eu pegaria ele?

obrigado fabio

Pelo que você explicou os passos são os seguintes:

1) uma tela de login recebe usuário e senha e encaminha para uma servlet;

2) a servlet processa a requisição, localiza o usuario no banco de dados, guarda os dados em uma sessão e redireciona para outra página com o formulário de pesquisa;

3) o formulário de pesquisa chama outra servlet que acessa os dados da sessão, monta a select, recupera as informações do banco de dados e envia a resposta para outra view.

É perfeitamente possível fazer isto. O segredo está em guardar os dados na sessão. Os dados da sessão podem ser visto por toda aplicação.

Gabriel extamente isso, mas como posso receber um Object na minha segunda servlet, porque pelo oq entendi guardo minha informações no :session.setAttribute("usuario.logado", agentes);

mas antes tenho que fazer:

agentes.setId(id);

e como pegaria isso em outra servlet?

porque o: session.getAttribute(); Recebe apenas String

obrigado.

Você pode fazer um "casting" conforme ensinado no exemplo do capítulo. Recupera o objeto guardado na sessão e "transforma-o" em um usuário. A partir daí pode usar os atributos do objeto Usuario.

Usuario usuarioLogado = (Usuario) session.getAttribute("usuario.logado");
solução!

Gabriel,

Quando você coloca algum objeto na Session usando o setAttribute(), o segundo parâmetro é o objeto, de fato, enquanto o primeiro, um nome para associar a ele.

Além disso, o getAttribute(), recebe uma String, que é justamente o nome que você atribuiu àquele objeto.

Se você precisa apenas do ID, você pode tentar fazer o seguinte:

session.setAttribute("id", agentes.getId());

E, na outra servlet, você faz o contrário:

session.getAttribute("id");

Lembrando que ela te devolve um Object, então você precisa fazer um casting:

int id = (int) session.getAttribute("id");

Mas, se você quiser jogar o objeto todo, pode tentar fazer assim:

session.setAttribute("agentes", agentes);

E na outra servlet:

Agentes agentes = (Agentes) session.getAttribute("agentes");
int id = agentes.getId();

Sacou?

Espero ter ajudado! =)

Abraço e bons estudos,

Fábio

........

Fabio perfeito cara entendi como funciona.

Gabriel obrigado tbm vc me ajudou muito