Pessoal, heelp.
Estou tentando fazer uma validação de dados com vraptor + jsr303.
vejam o código.
jsp.
<c:forEach var="error" items="${errors}">
${error.category} - ${error.message}<br />
</c:forEach>
<form action="${pageContext.request.contextPath}/estabelecimento/enviaContato" method="post">
<div id="Contato">
<h1>Entre em contato conosco<img src="${pageContext.request.contextPath}/img/bgTopoContCliente.png" /></h1>
<fieldset>
<label for="contato.nome"> Nome:
<input type="text" class="campoObrigatorio nome" name="contato.nome" value="${contato.nome}"/>
</label>
<label for="contato.email"> E-mail:
<input type="text" class="campoObrigatorio email" name="contato.email" value="${contato.email}"/>
</label>
<label for="contato.cidade"> Cidade:
<input type="text" class="campoObrigatorio cidade" name="contato.cidade" value="${contato.cidade}"/>
</label>
<label for="contato.mensagem"> Mensagem:
<textarea class="campoObrigatorio mensagem" name="contato.mensagem" value="${contato.mensagem}"></textarea>
</label>
<label class="right">
<button type="submit" class="btPesquisa">Enviar <span class="pesquisa">Mensagem</span></button>
</label>
</fieldset>
</div><!-- Fim div contato -->
</form>
Controller
@Resource
@Path("/estabelecimento")
@SessionScoped
public class EstabelecimentoController {
private @Inject EmailsEstabelecimentoService emailsEstabelecimentoService;
private final Result result;
private Validator validator;
public EstabelecimentoController(Result result, Validator validator){
this.result = result;
this.validator = validator;
}
@Get("/contato")
public void contato(){
}
@Post("/enviaContato")
public void enviaContato(Contato contato){
validator.validate(contato);
validator.onErrorUsePageOf(EstabelecimentoController.class).contato();
try {
emailsEstabelecimentoService.enviaEmailContato(contato);
} catch (EmailException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Contato.java
public class Contato {
@NotEmpty(message="O nome deve ser digitado!")
private String nome;
@Pattern(regexp=".+@.+\\.[a-z]+",message="O Email digitado é inválido!")
private String email;
@NotEmpty(message="A cidade deve ser digitado!")
private String cidade;
@NotEmpty(message="A mensagem deve ser digitado!")
private String mensagem;
public Contato() {
}
....gets e sets
o erro:
SEVERE: Servlet.service() for servlet [default] in context with path [/cliente] 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.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.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.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
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:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
at org.apache.catalina.connector.Request.setAttribute(Request.java:1563)
at org.apache.catalina.connector.RequestFacade.setAttribute(RequestFacade.java:543)
at javax.servlet.ServletRequestWrapper.setAttribute(ServletRequestWrapper.java:239)
at br.com.caelum.vraptor.core.DefaultResult.include(DefaultResult.java:66)
at br.com.caelum.vraptor.validator.DefaultValidator.onErrorUse(DefaultValidator.java:84)
at br.com.caelum.vraptor.validator.AbstractValidator.onErrorUsePageOf(AbstractValidator.java:55)
at br.com.apetiteweb.controller.EstabelecimentoController.enviaContato(EstabelecimentoController.java:143)
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)
... 41 more
O erro acontece quando passa na linha que redireciona caso tenha erro na validação. = validator.onErrorUsePageOf(EstabelecimentoController.class).contato();
Os parametros do objeto Contato está preenchido corretamente.
O que pode estar acontecendo?
Estou usando:
Hibernate 3.6.5
Vraptor 3.3.1
Spring 3.0.5
desde já, agradeço a atenção!