Erro idiota login no Vraptor

Nem sei se posso abrir um tópico assim , mas é o seguinte , estava criando um login para um projeto meu e no LoginController tem este código :

@Public
	@Post("/autenticar")
	public void autenticar(Dusr usuario) {				
		Dusr user = repository.autenticar(usuario.getId(),usuario.getDusrsenha());
		if (user != null) {
			userSession.setUser(user);
			result.redirectTo(IndexController.class).index();
		} else {
			result.include("error", "Usuário ou senha incorreta!").redirectTo(this).login();		
		}
	}

E a página de login estava assim :

<form action="${pageContext.request.contextPath}/autenticar"
	method="post">
	E-mail: <input type="text" name="dusr.id" /> 
	Senha : <input  type="text" name="dusr.dusrsenha" /> 
	<input type="submit" value="acessar" />
</form>

E quando eu ia autenticar dava este erro :

br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: java.lang.NullPointerException
	br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:89)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:51)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:23)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
	com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)


root cause 

java.lang.NullPointerException
	controller.LoginController.autenticar(LoginController.java:36)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:89)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:51)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:23)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
	com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)

Onde o erro aponta para esta linha do controller:

Dusr user = repository.autenticar(usuario.getId(),usuario.getDusrsenha());

Como para min estava certo , fiquei quebrando a cabeça o dia de ontem inteiro , até desistir . Hoje sem querer eu descobri , claro que vcs já devem ter matado :

Trocar isto

@Public
	@Post("/autenticar")
	public void autenticar(Dusr usuario) {  //<<<O nome da variavel que recebe os valores tem que ser os mesmos do jsp				
		Dusr user = repository.autenticar(usuario.getId(),usuario.getDusrsenha());
		if (user != null) {
			userSession.setUser(user);
			result.redirectTo(IndexController.class).index();
		} else {
			result.include("error", "Usuário ou senha incorreta!").redirectTo(this).login();		
		}
	}
Por isto
@Public
	@Post("/autenticar")
	public void autenticar(Dusr dusr) {
		Dusr user = repository.autenticar(dusr.getId(),dusr.getDusrsenha());
		if (user != null) {
			userSession.setUser(user);
			result.redirectTo(IndexController.class).index();
		} else {
			result.include("error", "Usuário ou senha incorreta!").redirectTo(this).login();		
		}
	}

ou trocar isto 

><form action="${pageContext.request.contextPath}/autenticar"
	method="post">
	E-mail: <input type="text" name="dusr.id" /> 
	Senha : <input  type="text" name="dusr.dusrsenha" /> 
	<input type="submit" value="acessar" />
</form>

por isto

<form action="${pageContext.request.contextPath}/autenticar"
	method="post">
	E-mail: <input type="text" name="usuario.id" /> 
	Senha : <input  type="text" name="usuario.dusrsenha" /> 
	<input type="submit" value="acessar" />
</form>

Com uma solução simples para um problema idiota pensei que poderia existir aqui no forum tipo um faq com erros comuns , oque vcs acham ?

É pq vc manda

então o nome da variavel tem que ser dusr e não vai bater com usuario.

flw

[quote=donath]É pq vc manda

então o nome da variavel tem que ser dusr e não vai bater com usuario.

flw[/quote]

Vc não leu tudo !

a gente pode colocar isso na própria documentação do VRaptor, que acha?

Acho interessante , mas o meu exemplo foi pouco, teria que reunir outros

cria uma issue lá por favor:

se quiser começar, basta criar um arquivo aqui:
https://github.com/caelum/vraptor/tree/master/vraptor-site/src/guide/pt

Obrigado!

[quote=Lucas Cavalcanti]cria uma issue lá por favor:

se quiser começar, basta criar um arquivo aqui:
https://github.com/caelum/vraptor/tree/master/vraptor-site/src/guide/pt

Obrigado![/quote]

No issue tem que ser em Ingles ?

idealmente sim, mas se quiser postar em pt eu traduzo depois.

Criei a issue 431 https://github.com/caelum/vraptor/issues/431 . Se você quiser alem de traduzir melhorar o texto fique a vontade.

valeu!