[VRAPTOR] - Autenticação - Pagina 112 - Capitulo 13 - Curso FJ28

3 respostas
V

Boa tarde pessoal,

Estou fazendo toda a apostila FJ28 do caelum e ja estou no final da apostila.
Agora, na autenticacao de usuarios, deu pau.
Gostaria de saber se alguem pode me ajudar.
O erro é o seguinte.
Quando clico no login (pagina para logar) a pagina nao abre e aparece o Erro 404.
Todo resto do sistema esta ok, inclusive o cadastro de usuarios.
Apenas a pagina de login q nao abre.
Vou colocar o codigo das paginas.

Controller

package br.com.caelum.goodbuy.controller;

import br.com.caelum.vraptor.validator.ValidationMessage;
import br.com.caelum.goodbuy.dao.UsuarioDao;
import br.com.caelum.goodbuy.infra.UsuarioWeb;
import br.com.caelum.goodbuy.modelo.Usuario;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import static br.com.caelum.vraptor.view.Results.*;

/**
 *
 * @author viniciusst
 */
@Resource
public class UsuariosController {

    private final UsuarioWeb usuarioWeb;
    private final UsuarioDao dao;
    private final Result result;
    private final Validator validator;

    public UsuariosController(UsuarioDao dao, Result result, Validator validator, UsuarioWeb usuarioWeb) {
        this.dao = dao;
        this.result = result;
        this.validator = validator;
        this.usuarioWeb = usuarioWeb;
    }

    @Post
    @Path("/usuarios")
    public void adiciona(Usuario usuario) {
        if (dao.existeUsuario(usuario)) {
            validator.add(new ValidationMessage("Login já existe", "usuario.login"));
        }
        validator.onErrorUse(page()).of(UsuariosController.class).novo();
    }

    public void novo() {
    }

    @Get
    @Path("/login")
    public void loginForm() {
    }

    @Post
    @Path("/login")
    public void login(Usuario usuario) {
        Usuario carregado = dao.carrega(usuario);
        if (carregado == null) {
            validator.add(new ValidationMessage("Login e/ou senha inválidos", "usuario.login"));
        }
        validator.onErrorUse(page()).of(UsuariosController.class).loginForm();
        usuarioWeb.login(carregado);
        result.redirectTo(ProdutosController.class).lista();
    }

    @Path("/logout")
    public void logout() {
        usuarioWeb.logout();
        result.redirectTo(ProdutosController.class).lista();

    }
}

UsuarioWeb

package br.com.caelum.goodbuy.infra;

import br.com.caelum.goodbuy.modelo.Usuario;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.SessionScoped;

/**
 *
 * @author viniciusst
 */
@Component
@SessionScoped
public class UsuarioWeb {

    private Usuario logado;

    public void login(Usuario usuario) {
        this.logado = usuario;
    }

    public String getNome() {
        return logado.getNome();
    }

    public boolean isLogado() {
        return logado != null;
    }

    public void logout() {
        this.logado = null;
    }
}

UsuarioDao

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.caelum.goodbuy.dao;

import br.com.caelum.goodbuy.modelo.Usuario;
import br.com.caelum.vraptor.ioc.Component;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author viniciusst
 */
@Component
public class UsuarioDao {

    private final Session session;  
    public UsuarioDao(Session session){  
        this.session=session;  
    }  
    public boolean existeUsuario(Usuario usuario){  
        Usuario encontrado=(Usuario) session.createCriteria(Usuario.class)  
        .add(Restrictions.eq("login", usuario.getLogin()))  
        .uniqueResult();  
        return encontrado !=null;  
    }  
    public Usuario carrega(Usuario usuario){  
        return(Usuario) session.createCriteria(Usuario.class)  
        .add(Restrictions.eq("login", usuario.getLogin()))  
        .add(Restrictions.eq("senha", usuario.getSenha()))  
        .uniqueResult();  
    }  
    public void adiciona(Usuario usuario){  
        Transaction tx=this.session.beginTransaction();  
        this.session.save(usuario);  
        tx.commit();  
    }
}

login.jsp

<form action="<c:url value="/login"/>" method="POST">
      <fieldset>
        <legend>Efetue o login</legend>
        <label for="login">Login:</label>
        <input id="login" type="text" name="usuario.login"/>
        <label for="senha">Senha:</label>
        <input id="senha" type="password" name="usuario.senha"/>
        <button type="submit">Login</button>
    </fieldset>
</form>

Hierarquia de pastas

-WEB-INF
—jsp
------carrinho
------mundo
------produtos
------usuarios
---------login.jsp
---------novo.jsp

Muito Obrigado.

Vinicius Teixeira

3 Respostas

jehffersson

Olá,
O problema é o nome do seu JSP!
O nome do arquivo deve ser igual ao nome do metodo.
Se o nome do metodo é!

public void loginForm() { } //então o arquivo deve ser loginForm.jsp
Solução alterar o nome do arquivo login.jsp para loginForm.jsp!

V

Muito Obrigado Jehffersson.
Vlw mesmo!
100% agora!
:stuck_out_tongue:

jehffersson

Eu tbm estou aprendendo! rsrs
VRaptor ém um show!

Criado 22 de março de 2011
Ultima resposta 22 de mar. de 2011
Respostas 3
Participantes 2