NullPointerException avec mon Validator de Checkboxes
bonjour,
j'ai un qcm avec des checkboxes qui marche très bien. Mais j'ai essayé de faire un validator d'après celui d'un formulaire, mais j'ai un message d'erreur
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| java.lang.NullPointerException
at com.almerys.jpa.tomcatspring.web.QcmValidator.validate(QcmValidator.java:20)
at com.almerys.jpa.tomcatspring.web.FormationController.processQcm(FormationController.java:119)
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 org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
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:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
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:662) |
Voici mon controleur
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @RequestMapping(value="showQcm/{sequenceId}", method = RequestMethod.POST)
public String processQcm(@PathVariable ("sequenceId") Long sequenceId,
@ModelAttribute ("evaluation") Evaluation evaluation,
BindingResult result,
Model model) {
new QcmValidator().validate(evaluation, result);
if (result.hasErrors()) {
return "qcm";
}
else {
Qcm qcm = qcmService.findBySequenceId(sequenceId);
evaluation.setQcm(qcm);
evaluation.setDate(new Date());
evaluationService.save(evaluation);
//evaluationService.saveCorrectAnswers(qcm, evaluation);
model.addAttribute("eval", evaluation);
model.addAttribute("qcmSuccess", qcm);
return "qcmSuccess";
}
} |
et mon Validator
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
public class QcmValidator {
public void validate(Evaluation eval, Errors errors) {
Long a = eval.getAnswers().get(0).getQuestion().getId();
int i = 1;
for (Answer answer : eval.getAnswers()){
if (answer.getQuestion().getId() > a){
a = answer.getQuestion().getId();
i++;
}
}
if (i < eval.getQcm().getQuestions().size()) {
errors.rejectValue("answers", "notChecked");
}
}
} |
Au début, pour vérifier le validator, ma méthode validate était juste :
Code:
1 2 3
| if(eval.getAnswers().size < 1){
errors.rejectValue("answers", "notChecked");
} |
et ca marchait sauf si aucune case n'était cochée, où un NullPointerException venait m'embeter.
Pourriez vous me dire d'ou vient l'erreur et comment résoudre ce probleme de soumission de qcm à vide ?
Merci