Usando Rest Vraptor

24 respostas
F

Ola galera estou quase no final da apostila fj28 e com a ajuda de todos meu projeto da faculdade esta quse pronto.
Bom estou na parte de cadastro de usuarios e ele esta dando um erro 404.

Vou postar as classes e controlers aqui para ver se alguem consegue me ajudar.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.caelum.goodbuy.controller;

import br.com.caelum.goodbuy.dao.UsuarioDao;
import br.com.caelum.goodbuy.modelo.Usuario;
import br.com.caelum.goodbuy.modelo.UsuarioWeb;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.ValidationMessage;

/**
 *
 * @author Fred
 */
public class UsuariosController {

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

    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.onErrorUsePageOf(UsuariosController.class).novo();
    dao.adiciona(usuario);
    result.redirectTo(ProdutosController.class).lista();
}

    public void novo() {
    }
    @Get @Path("/login")
        public void loginForm() {
}
    @Get @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.onErrorUsePageOf(UsuariosController.class).loginForm();
            usuarioWeb.login(carregado);
            result.redirectTo(ProdutosController.class).lista();
}
    @Path("/logout")
        public void logout() {
            usuarioWeb.logout();
            result.redirectTo(ProdutosController.class).lista();
}

}

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 org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Fred
 */
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 void adiciona(Usuario usuario) {
        Transaction tx = this.session.beginTransaction();
        this.session.save(usuario);
        tx.commit();
}
    public Usuario carrega(Usuario usuario) {
        return (Usuario) session.createCriteria(Usuario.class).add(Restrictions.eq("login", usuario.getLogin())).add(Restrictions.eq("senha", usuario.getSenha())).uniqueResult();
}
    }

E a Usuario:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.caelum.goodbuy.modelo;

import javax.persistence.Entity;
import javax.persistence.Id;

/**
 *
 * @author Fred
 */
@Entity
public class Usuario {
    @Id
    private String login;
    private String senha;
    private String nome;

    /**
     * @return the login
     */
    public String getLogin() {
        return login;
    }

    /**
     * @param login the login to set
     */
    public void setLogin(String login) {
        this.login = login;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {
        this.senha = senha;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

}

As pastas sao WEB_INF/JSP/USUARIOS/
E WEB_INF/JSP/LOGIN

Alguem pode me ajudar?

24 Respostas

W

fred_cbranco

O erro 404 acontece quando você chama o método novo(), creio eu seja para mostrar o form para cadastrar o usuário, ou quando você chama o método adiciona()?

Obs: Dentro da pasta WEB_INF/jsp/usuarios você tem que ter a jsp novo.jsp e dentro de WEB_INF/jsp/produtos a jsp lista.jsp

F

worldsoft:
fred_cbranco

O erro 404 acontece quando você chama o método novo(), creio eu seja para mostrar o form para cadastrar o usuário, ou quando você chama o método adiciona()?

Obs: Dentro da pasta WEB_INF/jsp/usuarios você tem que ter a jsp novo.jsp e dentro de WEB_INF/jsp/produtos a jsp lista.jsp

Quando chamo o metodo novo e eu tenho sim o novo.jsp.
Estava faltando a anotacao @resource no controller

W

fred_cbranco:
worldsoft:
fred_cbranco

O erro 404 acontece quando você chama o método novo(), creio eu seja para mostrar o form para cadastrar o usuário, ou quando você chama o método adiciona()?

Obs: Dentro da pasta WEB_INF/jsp/usuarios você tem que ter a jsp novo.jsp e dentro de WEB_INF/jsp/produtos a jsp lista.jsp

Quando chamo o metodo novo e eu tenho sim o novo.jsp.
Estava faltando a anotacao @resource no controller

fred_cbranco

Tem coisas que passa e nós desenvolvedores nem percebemos.

F

Verdade, mais vou manter este topico aqui pois esta dando alguns erros ainda hauhaua

W

Qualquer coisa posta ai se agente poder te ajudar…

F

Ok estou tentando minar todos os erros ai caso nao consiga eu grito hauahua
Valeu obrigado

F

Vamos la pessoal esta dando este erro que eu nao consegui resolver.

AVISO: StandardWrapperValve[default]: PWC1406: Servlet.service() for servlet default threw exception
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'usuariosController': Unsatisfied dependency expressed through constructor argument with index 0 of type [br.com.caelum.goodbuy.dao.UsuarioDao]: : Error creating bean with name 'usuarioDao': Unsatisfied dependency expressed through constructor argument with index 0 of type [org.hibernate.Session]: : No matching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'usuarioDao': Unsatisfied dependency expressed through constructor argument with index 0 of type [org.hibernate.Session]: : No matching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:730)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
        at org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:329)
        at org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:263)
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1083)
        at br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:86)
        at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:46)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
        at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
        at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
        at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
        at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:23)
        at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
        at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
        at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:619)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'usuarioDao': Unsatisfied dependency expressed through constructor argument with index 0 of type [org.hibernate.Session]: : No matching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:730)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
        at org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:329)
        at org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:844)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:786)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703)
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:795)
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:723)
        ... 53 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:920)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:789)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703)
        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:795)
        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:723)
        ... 67 more

Olha o UsuarioController

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.caelum.goodbuy.controller;



/**
 *
 * @author Fred
 */
import br.com.caelum.goodbuy.dao.UsuarioDao;
import br.com.caelum.goodbuy.modelo.Usuario;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.ValidationMessage;
@Resource
public class UsuariosController {
    private final UsuarioDao dao;
    private final Result result;
    private final Validator validator;
    public UsuariosController(UsuarioDao dao, Result result, Validator validator) {
        this.dao = dao;
        this.result = result;
        this.validator = validator;
}
    public void adiciona(Usuario usuario) {
        if (dao.existeUsuario(usuario)) {
            validator.add(new ValidationMessage("Login já existe", "usuario.login"));
        }
            validator.onErrorUsePageOf(UsuariosController.class).novo();
            dao.adiciona(usuario);
            result.redirectTo(ProdutosController.class).lista();
}
    public void novo() {

    }

    

}

O UsuarioDao

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 Fred
 */
@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 void adiciona(Usuario usuario) {
        Transaction tx = this.session.beginTransaction();
        this.session.save(usuario);
tx.commit();
    }

    }

E a Usuario

package br.com.caelum.goodbuy.modelo;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;

/**
 *
 * @author Fred
 */
@Entity
public class Usuario implements Serializable {
    @Id
    private String login;
    private String senha;
    private String nome;

    /**
     * @return the login
     */
    public String getLogin() {
        return login;
    }

    /**
     * @param login the login to set
     */
    public void setLogin(String login) {
        this.login = login;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {
        this.senha = senha;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

}
F

Resolvido tambem, eu so troquei o inicio da UsuarioDao que deu certo

F

Agora pessoal um erro ao acessar o login.
exception

java.lang.IllegalStateException: There are two rules that matches the uri ‘/login’ with method GET: [[FixedMethodStrategy: /login

meu controler é:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.caelum.goodbuy.controller;



/**
 *
 * @author Fred
 */
import br.com.caelum.goodbuy.dao.UsuarioDao;
import br.com.caelum.goodbuy.modelo.Usuario;
import br.com.caelum.goodbuy.modelo.UsuarioWeb;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.ValidationMessage;
@Resource
public class UsuariosController {
    private final UsuarioDao dao;
    private final Result result;
    private final Validator validator;
    private final UsuarioWeb usuarioWeb;
    public UsuariosController(UsuarioDao dao, Result result, Validator validator, UsuarioWeb usuarioWeb) {
        this.dao = dao;
        this.result = result;
        this.validator = validator;
        this.usuarioWeb = usuarioWeb;
}
    public void adiciona(Usuario usuario) {
        if (dao.existeUsuario(usuario)) {
            validator.add(new ValidationMessage("Login já existe", "usuario.login"));
        }
            validator.onErrorUsePageOf(UsuariosController.class).novo();
            dao.adiciona(usuario);
            result.redirectTo(ProdutosController.class).lista();
}
    public void novo() {

    }
    @Get @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.onErrorUsePageOf(UsuariosController.class).loginForm();
            usuarioWeb.login(carregado);
            result.redirectTo(ProdutosController.class).lista();
}
    @Get @Path("/login")
        public void loginForm() {
}
    @Path("/logout")
    public void logout() {
        usuarioWeb.logout();
        result.redirectTo(ProdutosController.class).lista();
}
    }

Alguem ai sabe como resolvo?

P

vc tem 2 paths com o mesmo nome: ‘/login’

@Get @Path("/login") public void login(Usuario usuario) {

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

só é possível 1

att,

F
pedruhenrik:
vc tem 2 paths com o mesmo nome: '/login'
@Get @Path("/login")  
        public void login(Usuario usuario) {
@Get @Path("/login")  
        public void loginForm() {

só é possível 1

att,

heheeh eu ja tinha visto e alterei agora esta assim:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.caelum.goodbuy.controller;



/**
 *
 * @author Fred
 */
import br.com.caelum.goodbuy.dao.UsuarioDao;
import br.com.caelum.goodbuy.modelo.Usuario;
import br.com.caelum.goodbuy.modelo.UsuarioWeb;
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 br.com.caelum.vraptor.validator.ValidationMessage;
@Resource
public class UsuariosController {
    private final UsuarioDao dao;
    private final Result result;
    private final Validator validator;
    private final UsuarioWeb usuarioWeb;
    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.onErrorUsePageOf(UsuariosController.class).novo();
            dao.adiciona(usuario);
            result.redirectTo(ProdutosController.class).lista();
}
    public void novo() {

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


}
   @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.onErrorUsePageOf(UsuariosController.class).login();
        usuarioWeb.login(carregado);
        result.redirectTo(ProdutosController.class).lista();
}
    }

Mais agora esta dando este erro

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'criadorDeSessionFactory': Invocation of init method failed; nested exception is java.lang.OutOfMemoryError: PermGen space
Vc sabe oque é?

F

Pelo que entendi o erro na CriadordeSessionFactory.
Mais eu nao sei onde que esta tentando criar esta carniça rsss

L

PermGen em dev geralmente é qdo vc usa o auto-deploy do servidor. Basta reiniciá-lo de verdade que funciona.

F

Bom outra duvida galera
Eu Criei a pasta admin e dentro dela eu coloquei o arquivo admin.jsp
no meu produtosController eu coloquei esta logica:

@Get @Path("/admin/admin")
    public List<Produto> lista1() {
        return dao.listaTudo();
}

NO meu ProdutoDao
esta assim

public List<Produto> listaTudo() {
        return this.session.createCriteria(Produto.class).list();
}

quando eu acesso a url http://localhost:8080/modular1/admin/admin
ele nao teria que trazer o arquivo lista1?
Ele esta dando erro 404.
Mais no console ele esta executando a lista do hibenate oque pode ser?
Obrigado

L

existe o arquivo /WEB-INF/jsp/produtos/lista1.jsp ?

o @Path não influencia no caminho do jsp

F

Lucas Cavalcanti:
existe o arquivo /WEB-INF/jsp/produtos/lista1.jsp ?

o @Path não influencia no caminho do jsp

eu achei que o lista1 deveria estar na pasta admin!

F

Deu certo obrigado

F

MAis um erro bobo
A ideia aqui é quando eu acessar a url http://localhost:8080/modular1/admin
ele me abra o arquivo novo.jsp para eu cadastrar um novo admin

entao segue meu controler:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.caelum.goodbuy.controller;

import br.com.caelum.goodbuy.dao.AdminDao;
import br.com.caelum.goodbuy.modelo.AdminWeb;
import br.com.caelum.goodbuy.modelo.Useradmin;
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 br.com.caelum.vraptor.validator.ValidationMessage;



/**
 *
 * @author Fred
 */

@Resource
public class AdminController {
    private final AdminDao dao;
    private final Result result;
    private final Validator validator;
    private final AdminWeb adminWeb;
    public AdminController(AdminDao dao, Result result, Validator validator, AdminWeb AdminWeb) {
        this.dao = dao;
        this.result = result;
        this.validator = validator;
        this.adminWeb = AdminWeb;
}
    @Post @Path("/admin")
    public void adiciona(Useradmin useradmin) {
        if (dao.existeAdmin(useradmin)) {

    validator.add(new ValidationMessage("Login já existe", "usuario.login"));
        }
            validator.onErrorUsePageOf(AdminController.class).novo();
            dao.adiciona(useradmin);
            result.redirectTo(ProdutosController.class).lista();
}
    public void novo() {

}
    @Get @Path("/admin/login")
        public void login() {
}
    @Post @Path("/admin/login")
    public void login(Useradmin useradmin) {
        Useradmin carregado = dao.carrega(useradmin);
        if (carregado == null) {
        validator.add(new ValidationMessage("Login e/ou senha inválidos", "usuario.login"));
        }
        validator.onErrorUsePageOf(AdminController.class).login();
        adminWeb.login(carregado);
        result.redirectTo(ProdutosController.class).lista();
}
    @Path("/logout")
        public void logout() {
        adminWeb.logout();
        result.redirectTo(ProdutosController.class).lista();
}

}

Minha Dao

/*
 * 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.infra.CriadorDeSession;
import br.com.caelum.goodbuy.modelo.Useradmin;
import br.com.caelum.vraptor.ioc.Component;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;



/**
 *
 * @author Fred
 */
@Component
public class AdminDao {
    private final Session session;
    public AdminDao() {
    this.session = CriadorDeSession.getSession();
}
    public boolean existeAdmin(Useradmin useradmin) {
        Useradmin encontrado = (Useradmin) session.createCriteria(Useradmin.class).add(Restrictions.eq("login", useradmin.getLogin())).uniqueResult();
        return encontrado != null;
}
    public void adiciona(Useradmin useradmin) {
        Transaction tx = this.session.beginTransaction();
        this.session.save(useradmin);
        tx.commit();
    }
    public Useradmin carrega(Useradmin useradmin) {
        return (Useradmin) session.createCriteria(Useradmin.class).add(Restrictions.eq("login", useradmin.getLogin())).add(Restrictions.eq("senha", useradmin.getSenha())).uniqueResult();
}

    }

E as minhas duas classes

UserAdmin

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.caelum.goodbuy.modelo;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;

/**
 *
 * @author Fred
 */
@Entity
public class Useradmin implements Serializable {
    @Id
    private String login;
    private String senha;
    private String nome;

    /**
     * @return the login
     */
    public String getLogin() {
        return login;
    }

    /**
     * @param login the login to set
     */
    public void setLogin(String login) {
        this.login = login;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {
        this.senha = senha;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

}

E a AdminWeb

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.caelum.goodbuy.modelo;

import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.SessionScoped;

/**
 *
 * @author Fred
 */
@Component
@SessionScoped
    public class AdminWeb {
        private Useradmin logado;
   
        public void login(Useradmin useradmin) {
        this.logado = useradmin;
    }
        public void logout() {
            this.logado = null;

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

Ao executar a URL ele esta dando erro 405 onde estou errando?

L

vc precisa anotar o método novo com @Get("/admin")

F

Valeu meu Brother muito obrigado era isso mesmo.
Estou a 48 horas ligado direto sem dormir para poder entregar este projeto eheheheeh

F

Este é um outro erro mais nao vou abrir outro topico para ele nao.
Sequinte o cadastro de admin funciona beleza mais quando vou fazer login ele da o sequinte erro.

AVISO: StandardWrapperValve[default]: PWC1406: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: java.lang.NullPointerException
        at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
        at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
        at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:89)
        at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
        at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
        at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
        at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
        at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
        at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
        at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
        at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:23)
        at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
        at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
        at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
        at br.com.caelum.goodbuy.dao.AdminDao.carrega(AdminDao.java:37)
        at br.com.caelum.goodbuy.controller.AdminController.login(AdminController.java:57)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
        ... 50 more

Chamo a atencao para as seguintes linhas

Caused by: java.lang.NullPointerException
        at br.com.caelum.goodbuy.dao.AdminDao.carrega(AdminDao.java:37)
        at br.com.caelum.goodbuy.controller.AdminController.login(AdminController.java:57)

bom segue ai minha dao e minha controler
Primeiro a dao

/*
 * 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.infra.CriadorDeSession;
import br.com.caelum.goodbuy.modelo.Useradmin;
import br.com.caelum.vraptor.ioc.Component;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;



/**
 *
 * @author Fred
 */
@Component
public class AdminDao {
    private final Session session;
    public AdminDao() {
    this.session = CriadorDeSession.getSession();
}
    public boolean existeAdmin(Useradmin useradmin) {
        Useradmin encontrado = (Useradmin) session.createCriteria(Useradmin.class).add(Restrictions.eq("login", useradmin.getLogin())).uniqueResult();
        return encontrado != null;
}
    public void adiciona(Useradmin useradmin) {
        Transaction tx = this.session.beginTransaction();
        this.session.save(useradmin);
        tx.commit();
    }
    public Useradmin carrega(Useradmin useradmin) {
        return (Useradmin) session.createCriteria(Useradmin.class).add(Restrictions.eq("login", useradmin.getLogin())).add(Restrictions.eq("senha", useradmin.getSenha())).uniqueResult();
}

    }

O erro aparentemente e neste metodo carrega

public Useradmin carrega(Useradmin useradmin) {
        return (Useradmin) session.createCriteria(Useradmin.class).add(Restrictions.eq("login", useradmin.getLogin())).add(Restrictions.eq("senha", useradmin.getSenha())).uniqueResult();

Agora meu controller

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.caelum.goodbuy.controller;

import br.com.caelum.goodbuy.dao.AdminDao;
import br.com.caelum.goodbuy.modelo.AdminWeb;
import br.com.caelum.goodbuy.modelo.Useradmin;
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 br.com.caelum.vraptor.validator.ValidationMessage;



/**
 *
 * @author Fred
 */

@Resource
public class AdminController {
    private final AdminDao dao;
    private final Result result;
    private final Validator validator;
    private final AdminWeb adminWeb;
    public AdminController(AdminDao dao, Result result, Validator validator, AdminWeb AdminWeb) {
        this.dao = dao;
        this.result = result;
        this.validator = validator;
        this.adminWeb = AdminWeb;
}
    @Post @Path("/admin/novoadmin")
    public void adiciona(Useradmin useradmin) {
        if (dao.existeAdmin(useradmin)) {

    validator.add(new ValidationMessage("Login já existe", "usuario.login"));
        }
            validator.onErrorUsePageOf(AdminController.class).novo();
            dao.adiciona(useradmin);
            result.redirectTo(ProdutosController.class).lista1();
}
    @Get("/admin/novoadmin")
    public void novo() {

}
    @Get @Path("/admin/login")
        public void login() {
}
    @Post @Path("/admin/login")
    public void login(Useradmin useradmin) {
        Useradmin carregado = dao.carrega(useradmin);
        if (carregado == null) {
        validator.add(new ValidationMessage("Login e/ou senha inválidos", "useradmin.login"));
        }
        validator.onErrorUsePageOf(AdminController.class).login();
        adminWeb.login(carregado);
        result.redirectTo(ProdutosController.class).formulario();
}
    @Path("/logout")
        public void logout() {
        adminWeb.logout();
        result.redirectTo(ProdutosController.class).lista();
}

}

No controle o erro é no:

[/code]

public void login(Useradmin useradmin) {

Useradmin carregado = dao.carrega(useradmin);

if (carregado == null) {

validator.add(new ValidationMessage(Login e/ou senha inválidos, useradmin.login));

}

validator.onErrorUsePageOf(AdminController.class).login();

adminWeb.login(carregado);

result.redirectTo(ProdutosController.class).formulario();

[/code]

Eu ja fundi meus neuronios estou desde quarta a noite mechendo nisso alguem pode me ajudar?
Lucas?

P
return (Useradmin) session.createCriteria(Useradmin.class).add(Restrictions.eq("login", useradmin.getLogin())).add(Restrictions.eq("senha", useradmin.getSenha())).uniqueResult();

se vc fizer a query na mão direto no banco o q retorna?

se não me engano .uniqueResult(); retorna nulo se não encontrar.

att,

L

nessa linha:

Caused by: java.lang.NullPointerException  
        at br.com.caelum.goodbuy.dao.AdminDao.carrega(AdminDao.java:37)

vê o que pode estar nulo.

por exemplo, o useradmin, ou a session

F

o erro estava no jsp galera no value estava passando a classe errado.
Obrigado

Criado 23 de junho de 2011
Ultima resposta 24 de jun. de 2011
Respostas 24
Participantes 4