Gente eu tenho uma classe que contém a lógica do login.
Ela verifica se o mesmo existe e redireciona para a “home” do projeto.
Porém eu tento na home pegar o nome do usuário e não consigo…
Tento fazer assim :
Bem vindo ${usuario.nome}
Porém ele não mostra nada , alguém poderia me falar como que eu passo o nome do usuário para essa página ? Muito obrigado !
Você esta atribuindo o objeto a um request.setAttribute ou HttpSession antes de tentar recuperar ele na página de destino ?
Nesse post aqui eu mostro como fazer: Autenticação de Usuários (Filter/Servlet).
Vc precisa colocar o usuário no request/session como o leocantanhede disse.
Então creio eu que não estou fazendo isso não .
Eu apenos monto a query e em um preparedStatement e passo os parametros para a query.
Como que eu passaria para esse request?
Muito obrigado!!
Depois que você obter o resultado no método que você criou, deverá atribuir o resultado a sua váriavel.
Ex:
//Método que recupera o nome do cliente
public String retornarNomeCliente(int cdCliente) {
Connection con = null;
PreparedStatement pst = null;
ResultSet rs = null;
try {
con = DBPool.getConnection();
pst = con.prepareStatement("select nome from clientes whrere cd_cliente = ?");
pst.setInt(1, cdCliente);
rs = pst.executeQuery();
if(rs.next()) {
//Aqui ele recupera o nome do cliente
nomeCliente = rs.getString("nome");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBPool.doFinallyClose(con, pst, rs);
}
}
No seu servlet irá fazer o seguinte:
//Exemplo
Cliente cliente = new Cliente();
cliente.setCodigo(Integer.parseInteger(request.getParameter("codigoCliente")));
cliente.setNome(cliente.retornarNomeCliente(cliente.getCodigo()));
//Atribui o objeto a um request
request.setAttribute("cliente", cliente);
//Redireciona para a página de destino
RequestDispatcher rd = request.getRequestDispatcher("./index.jsp");
rd.foward(request, response);
Para pegar o objeto na página de destino
<jsp:useBean id="cliente" scope="request" class="br.com.lunasoft.entidades.Cliente"/>
cliente = Cliente(request.getAttribute("cliente"));
//Exibindo
<b>Bem vindo ${cliente.nome}</b>
É mais ou menos isso que deve ser feito
Muito obrigado mesmo !
Mais no meu caso que não trabalho com servlet pura …
Mexo com Struts2.
então a minha action está assim :
package br.com.cfr.action;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import br.com.cfr.jdbc.dao.UsuarioDAO;
import br.com.cfr.jdbc.modelo.Usuario;
public class LoginAction {
private Usuario usuario;
@Action(value = "login", results = {
@Result(name = "ok", location = "home_usuario.jsp"),
@Result(name = "admin", location = "home_admin.jsp"),
@Result(name = "invalido", location = "login-errado.jsp") })
public String execute() throws ClassNotFoundException {
if (new UsuarioDAO().procura(usuario)) {
if (new UsuarioDAO().pesquisa(usuario)) {
return "admin";
}else {
return "ok";
}
}
return "invalido";
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
}
Eu devo colocar aonde o request?
E quando eu coloco ele pede (obvio) para importar , porém tem muitos imports qual seria o correto??
Muito obrigado !!
Qual o critério de busca do usuário ?
Como assim o critério ?
Apenas faço um select e passo os parâmetros login e senha .
Se existir esses parâmetros ele vai retorna true apenas isto.
A minha dúvida é aonde eu coloco esse request e se posso simplesmente coloca-lo se não tem que fazer algo antes sei lá.
Muitissimo obrigado , e também …
Se existe outro jeito para isso , ou se isso é apenas o único jeito mesmo .
Você não esta passando os parâmetros esta passando um objeto, com os atributos setados, no Struts não precisa do request.setAttribute, pelo que estou vendo parace que seu método de pesquisa é que esta errado, o seu select deve possuir um critério parecido com aquele que postei, seja ele pelo login ou senha, que deverá ser usado no método pesquisa, se quizer me mande o código do DAO, do jsp de entrada, da classe do Struts e do jsp de saída para eu entender melhor o que está sendo feito para assim poder te ajudar melhor, mande para leocantanhede@gmail.com
Então eu acho estranho .
Porque eu tenho uma action para listar e funciona perfeitamente .
na jsp eu faço :
[code]
<c:forEach items="${veiculos}" var=“veiculo” >
<tr>
<td hidden="veiculo.id">${veiculo.id}</td>
<td>${veiculo.nome}</td>
<td >${veiculo.marca}</td>
<td >${veiculo.cor}</td>
<td >${veiculo.cilindrada}</td>
<td >${veiculo.categoria}</td>
<td >${veiculo.tarifaBasica}</td>
<td >${veiculo.tarifaEspecial}</td>
<td >${veiculo.estadoReserva}</td>
<td><a href="reservaVeiculo?veiculo.id=${veiculo.id}">Reservar</a></td>
</tr>
</c:forEach>
[/code]
E funciona perfeitamente!!!
E apenas faço isso na action :
package br.com.cfr.action;
import java.util.List;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import br.com.cfr.jdbc.dao.VeiculoDAO;
import br.com.cfr.jdbc.modelo.Veiculo;
public class ListaVeiculoAction {
private List<Veiculo> veiculos;
public void setVeiculos(List<Veiculo> veiculos) {
this.veiculos = veiculos;
}
@Action(value="listaVeiculo", results= {
@Result(name="ok", location="lista_veiculo.jsp")
})
public String execute() throws ClassNotFoundException {
veiculos = new VeiculoDAO().lista();
return "ok";
}
public List<Veiculo> getVeiculos() {
return veiculos;
}
}
O método lista faz um select e adiciona em uma List , segue código :
public List<Veiculo> lista() {
try {
List<Veiculo> veiculos = new ArrayList<Veiculo>();
PreparedStatement stmt = this.connection.prepareStatement("select * from tabveic where estadoReserva= 'L' ");
ResultSet rs = stmt.executeQuery();
while (rs.next()){
Veiculo veiculo= new Veiculo();
veiculo.setId(rs.getLong("id"));
veiculo.setNome(rs.getString("nome"));
veiculo.setMarca(rs.getString("marca"));
veiculo.setCilindrada(rs.getString("cilindrada"));
veiculo.setCategoria(rs.getString("categoria"));
veiculo.setCor(rs.getString("cor"));
veiculo.setTarifaBasica(rs.getString("tarifaBasica"));
veiculo.setTarifaEspecial(rs.getString("tarifaEspecial"));
veiculo.setEstadoReserva(rs.getString("estadoReserva"));
veiculos.add(veiculo);
}
rs.close();
stmt.close();
return veiculos;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
E funciona perfeitamente , eu não entendo porque não funciona no login…
Acho melhor resolver por aqui mesmo , que isso acaba ajudando outras pessoas que acabam se deparando na mesma situação que eu .
Obrigado !!
Uma coisa é você verificar se o tem usuário no banco, para buscar somente um especifico deverá ser usado uma cláusula where na sua consulta, o método consulta procura verifica se tem usuário no banco e retorna true se achar, mas no método pesquisa esta sendo passado um *, então ele não traz somente 1 e sim todos que estiverem cadastrados.
Então eu uso .
Segue o código :
PreparedStatement stmt = connection.prepareStatement("select * from tabclie where login=? and senha=?");
Usa somente a chave primária da tabela, que ai só vai trazer o que você quer, e coloque o método setUsuario e getUsuario abaixo da declaração da variável.
Exemplo:
Supondo que o login seja único:
PreparedStatement stmt = connection.prepareStatement("select * from tabclie where login=?");
stmt.setString(1, getUsario().getLogin());
stmt.execute();
rs = stmt.executeQuery();
Então .
O método em si do login funciona legal .
Porque eu tenho que compara com a base passando o login e senha .
Depois eu verifico se a query retornou algo , e se retornou eu retorno true para a action.
O problema é que ele teima em não aparecer nada na JSP …
Na minha opinião você não precisa do método consulta, usa somente o pesquisa com a cláusula where, antes do execute coloque o set e o get e de quando no execute coloque:
usuario = new UsuarioDAO().pesquisa(usuario.getLogin());
Ai sim estara atribuindo um usuário com valores;
Blz cara tentei te ajudar e parece que não gostou muito, deixo a vontade para que resolva seu problema.
âhn??
Não entendi …
Mais então .
Eu não entendo o fato de um funcionar e o outro não …
Será que é por causa da List??
Que ele retorna a list na jsp ??
O seu método pesquisa retorna uma list ?