e o parâmetro do método tem que ter o mesmo nome (maiusculas e minusculas fazem diferença):
public void atualiza(Usuarios usuarios) {.
J
juniorsatanas
Dei uma parada para ler a Documentação ontem, e percebi que pode-se usar tanto o Hibernante quanto REST…
Refiz todo meu código : Mesmo Assim Nada Funciona !
ficou assim :
// 12 JANEIRO DE 2010 - SISTEMA GLOBAL WEBpackagebr.com.caelum.vraptor.global.controller;importjava.util.ArrayList;importjava.util.List;importbr.com.caelum.vraptor.Get;importbr.com.caelum.vraptor.Path;importbr.com.caelum.vraptor.Post;importbr.com.caelum.vraptor.Resource;importbr.com.caelum.vraptor.Result;importorg.hibernate.validator.Validator;importbr.com.caelum.vraptor.global.dao.UsuariosDao;importbr.com.caelum.vraptor.global.model.Usuarios;@ResourcepublicclassUsuariosController{//classes publicaprivateUsuariosDaodao;privateResultresult;privateValidatorvalidator;publicUsuariosController(UsuariosDaodao,Resultresult,Validatorvalidator){this.dao=dao;// seta o Daothis.result=result;// seta o Resultthis.validator=validator;}@Path("/usuarios/{usuarios.id}")@GetpublicList<Usuarios>lista(){returnnewArrayList<Usuarios>();}@Path("/usuarios/{usuarios.id}")@GetpublicList<Usuarios>listaTodos(){returnnewArrayList<Usuarios>();}@Path("/usuarios/adiciona")@Postpublicvoidadiciona(Usuariosusuarios){this.dao.adiciona(usuarios);}publicvoidformulario(){}}
packagebr.com.caelum.vraptor.global.model;importjava.io.Serializable;importjavax.persistence.Id;importbr.com.caelum.vraptor.ioc.Component;importjavax.persistence.GeneratedValue;@ComponentpublicclassUsuariosimplementsSerializable{@Id//@NotNull@GeneratedValueprivateLongid;privateStringlogin;privateStringnome;privateStringpassword;/** * @return the id */publicLonggetId(){returnid;}/** * @param id the id to set */publicvoidsetId(Longid){this.id=id;}/** * @return the login */publicStringgetLogin(){returnlogin;}/** * @param login the login to set */publicvoidsetLogin(Stringlogin){this.login=login;}/** * @return the password */publicStringgetPassword(){returnpassword;}/** * @param password the password to set */publicvoidsetPassword(Stringpassword){this.password=password;}/** * @return the nome */publicStringgetNome(){returnnome;}/** * @param nome the nome to set */publicvoidsetNome(Stringnome){this.nome=nome;}}
Junior, uma coisa você sempre tem que ter em mente: o vraptor é um controlador e o Hibernate é um datamapper. Um não tem nada a ver com o outro. O fato de você usar Hibernate não impacta em nada no Vraptor.
Mas quanto ao seu problema, eu já havia comentado em outro tópico, e reitero aqui. Note a exception:
Você possui dois métodos respondendo para um mesmo URI, onde o correto é ter apenas um. A anotação @Path com o parametro /usuarios/{usuarios.id} está tando no método lista como no listaTodos. Isso não pode acontecer, o URI tem que ser único.
Além disso você precisa entender melhor como funciona o bind dos valores que vem do request. Quando você usar {usuarios.id} no @Path o vraptor vai procurar no seu método um objeto com o nome usuarios e nele vai tentar injetar o atributo id. No seu caso você não tem em nenhum dos métodos o atributo usuarios.
Desculpe se não consegui te explicar direito, estou com um pouco de pressa agora. Mas sinta-se a vontade de questionar se você não entendeu.
Abraços
J
juniorsatanas
G
garcia-jj
Junior, você precisa ler melhor as exceptions.
Nesse caso você tem dois candidatos a injeção de Session: org.hibernate.Session e br.com.caelum.vraptor.global.controller.SessionCreator.
Não sei bem como funciona essas configurações de Hibernate dentro do vraptor, pois não uso assim. Acho que o Lucas pode te ajudar melhor. De qualquer forma, me diga como você está criando/injetando/usando a Session do Hibernate?
L
Lucas_Cavalcanti
se vc criou a classe br.com.caelum.vraptor.global.controller.SessionCreator na sua aplicação, remova-a ou tire a anotação @Component dela, que deve funcionar
// 12 JANEIRO DE 2010 - SISTEMA GLOBAL WEBpackagebr.com.caelum.vraptor.global.controller;importjava.util.ArrayList;importjava.util.List;importbr.com.caelum.vraptor.Get;importbr.com.caelum.vraptor.Path;importbr.com.caelum.vraptor.Post;importbr.com.caelum.vraptor.Resource;importbr.com.caelum.vraptor.Result;importorg.hibernate.validator.Validator;importbr.com.caelum.vraptor.global.dao.UsuariosDao;importbr.com.caelum.vraptor.global.model.Usuarios;@ResourcepublicclassUsuariosController{//classes publicaprivateUsuariosDaodao;privateResultresult;privateValidatorvalidator;publicUsuariosController(UsuariosDaodao,Resultresult,Validatorvalidator){this.dao=dao;// seta o Daothis.result=result;// seta o Resultthis.validator=validator;}@Path("/usuarios/{usuarios.id}")@GetpublicList<Usuarios>lista(){returnnewArrayList<Usuarios>();}@Path("/usuarios/adiciona")@Postpublicvoidadiciona(Usuariosusuarios){this.dao.adiciona(usuarios);}publicvoidformulario(){}}
L
Lucas_Cavalcanti
apague as classes CustomProvider e SessionCreator (e SessionFactoryCreator se vc tiver também) e coloque essa configuração no web.xml
se já tiver uma com o mesmo nome (provavelmente apontando pro custom provider) apague-a
ainda tá dando o mesmo erro?
J
juniorsatanas
erro :
HTTP Status 500 -
type Exception report
message
descriptionThe server encountered an internal error () that prevented it from fulfilling this request.
exception
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘usuariosController’ defined in file [/home/junior/global/build/web/WEB-INF/classes/br/com/caelum/vraptor/global/controller/UsuariosController.class]: Unsatisfied dependency expressed through constructor argument with index 2 of type [org.hibernate.validator.Validator]: : No unique bean of type [org.hibernate.validator.Validator] is defined: Unsatisfied dependency of type [interface org.hibernate.validator.Validator]: expected at least 1 matching bean; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [org.hibernate.validator.Validator] is defined: Unsatisfied dependency of type [interface org.hibernate.validator.Validator]: expected at least 1 matching bean
note The full stack traces of the exception and its root causes are available in the GlassFish v3 logs.
GlassFish v3
J
juniorsatanas
L
Lucas_Cavalcanti
interface org.hibernate.validator.Validator
vc importou a classe errada… o certo eh br.com.caelum.vraptor.Validator…
tome cuidado: quase tudo que está na documentação do vraptor é pra ser importado das classes do vraptor
[]
F
fredericocuba
Eu ainda não entendi qual seria a uri nos casos que seguem, da classe controladora de produtos que está logo abaixo.