IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

NullPointerException avec mon Validator de Checkboxes


Sujet :

Spring Java

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 476
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Il serait bon de préciser quelle est la ligne n°20 dans ta classe QCMValidator.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 476
    Par défaut
    ma ligne 20 est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (i < eval.getQcm().getQuestions().size()) {
    mais au petit matin, je viens de tout vérifier, et apparemment, la méthode validate n'est pas prise en compte puisque si je valide mon qcm sans aucune case cochée, j'ai un "Etat HTTP 500" avec un NullPointerException, et sinon, mon qcm est validé comme si de rien n'était, quelque soit le contenu de la méthode validate.

    Avec mon formulaire, si rien n'est remplit, il me gueule dessus, et avec mon qcm, il me lance une erreur à la figure. Comment puis je déjà résoudre ce problème ? (et l'autre par la suite)

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    3 possibilités :
    - eval == null
    - eval.getQcm() == null
    - eval.getQcm().getQuestions() == null

    A toi de faire les bon tests pour gérer correctement ton validate.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 476
    Par défaut
    je viens de voir un truc avec le mode debug, c'est que lorsque je valide un qcm sans aucune case cochée, le QcmValidator n'est pas appelé, c'est à dire que je ne rentre pas dans la méthode Post de mon Controler.

    Du coup, comment controler un qcm/formulaire qui n'est jamais récupérer ?

Discussions similaires

  1. J'ai un NPE (NullPointerException) avec mon ArrayAdapter - spinner
    Par Fed... dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 27/12/2013, 07h58
  2. [Débutant] ORA-01843 NOT A VALID MONTH avec mon insert
    Par jacko842 dans le forum ADO.NET
    Réponses: 7
    Dernier message: 20/10/2012, 10h45
  3. Pas de validation client avec mon Fluent Html Helper, pourquoi ?
    Par lneoncyberl dans le forum ASP.NET MVC
    Réponses: 0
    Dernier message: 10/07/2011, 16h49
  4. problèmes avec mon validator
    Par newmar dans le forum Struts 1
    Réponses: 8
    Dernier message: 15/02/2008, 19h01
  5. envoyer un mail avec mon programme
    Par shrek dans le forum C++Builder
    Réponses: 8
    Dernier message: 06/12/2006, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo