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

Plateformes (Java EE, Jakarta EE, Spring) et Serveurs Discussion :

Probléme avec le converter d'un <h:selectOneMenu>


Sujet :

Plateformes (Java EE, Jakarta EE, Spring) et Serveurs

  1. #1
    Candidat au Club
    Probléme avec le converter d'un <h:selectOneMenu>
    salut à vous tous,
    Vraiment en besoin d'aide je souffre avec une erreur depuis 2 jours. je suis en train de développer ma premiére application JEE avec JSF2.2 Hibernate 5.2.9 Spring3
    je veux remplir dynamiquement un selectOneMenu à partir d'une base de données.
    dans ma page JSF addUtilisateur.xhtml
    Code java :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                                  <tr>
    				<td><h:outputLabel for="groupe" value="Groupe : "  effect="fade" /></td> 
    					<td><h:selectOneMenu  value="#{utilisateurMB.groupe}" id="groupe" converter="com.it4all.giep.core.controller.GroupeConverter">
    					    <f:selectItem itemLabel="" itemValue=""></f:selectItem>
    					    <f:selectItems value="#{groupeMB.groupeList}" var="groupe" itemLabel="#{groupe.libelle}" itemValue="#{groupe}"
                                                 </f:selectItems>
    						<p:ajax event="blur" update="groupeMsg" />
    					         <p:message id="groupeMsg" for="groupe" display="icon" />
    					</h:selectOneMenu></td>
    			     </tr>


    la classe du converter GroupeConverter

    Code ava :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
    @FacesConverter("com.it4all.giep.core.controller.GroupeConverter")
    public class GroupeConverter implements Converter {
        @Resource
        private IGroupeService groupeService;
    	@Override
    	public Object getAsObject(FacesContext context, UIComponent component,String value) {
    		 String str[] = value.split(",", 2);
    		  
    		    if (value != null && !value.trim().isEmpty()){
    		         // Instanciation du model
    		        Groupes groupe = new Groupes();
    		       // System.out.println(str[1]);
    		        System.out.println(value);
    		       // Va chercher l'objet en base qui correspond à cet id
    		       
    		      groupe = groupeService.getGroupeById( Integer.parseInt(str[0]));
    	
    		       
    		        return groupe;
    		    }
    		    else {
    		        FacesMessage message = new FacesMessage("Veuillez sélectionner un groupe");
    		        message.setSeverity(FacesMessage.SEVERITY_ERROR);
    		        return null;
    		    }
    	}
    
    	@Override
    	public String getAsString(FacesContext context, UIComponent component,
                Object value) {
    		return value.toString();
        }
    }


    méthode equals je l'ai générée automatiquement dans la classe Groupes

    Code java :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
     
    	@Override
    	public boolean equals(Object obj) {
    		if (this == obj)
    			return true;
    		if (obj == null)
    			return false;
    		if (getClass() != obj.getClass())
    			return false;
    		Groupes other = (Groupes) obj;
    		if (idgroupe != other.idgroupe)
    			return false;
    		if (libelle == null) {
    			if (other.libelle != null)
    				return false;
    		} else if (!libelle.equals(other.libelle))
    			return false;
    		return true;
    	}
    }


    la groupeList dans le GroupeManagedbean

    Code java :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public List<Groupes> getGroupeList() {
     
    		groupeList = new ArrayList<Groupes>();
    		groupeList.addAll(getGroupeService().findAll());
    		return groupeList;
    	}
     
    }


    quant j'execute je récupére ma liste de la base de données mais quand je choisit un Groupe de la liste déroulante JSF utilise leGroupeConverter avec getAsObject il me renvoie mon message on console avec la valeure "1,admin" puis j'ai cette érreur NullPointerException
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
     
    Hibernate: select groupes0_.IDGROUPE as IDGROUPE1_9_, groupes0_.DESCRIPTION as DESCRIPT2_9_, groupes0_.LIBELLE as LIBELLE3_9_ from groupes groupes0_
    1,admin
    avr. 17, 2017 9:42:31 PM com.sun.faces.context.PartialViewContextImpl processPartial
    INFOS: java.lang.NullPointerException
    java.lang.NullPointerException
    	at com.it4all.giep.core.controller.GroupeConverter.getAsObject(GroupeConverter.java:33)
    	at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(Unknown Source)
    	at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectOneValue(Unknown Source)
    	at com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(Unknown Source)
    	at javax.faces.component.UIInput.getConvertedValue(Unknown Source)
    	at javax.faces.component.UIInput.validate(Unknown Source)
    	at javax.faces.component.UIInput.executeValidate(Unknown Source)
    	at javax.faces.component.UIInput.processValidators(Unknown Source)
    	at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(Unknown Source)
    	at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(Unknown Source)
    	at javax.faces.component.UIComponent.visitTree(Unknown Source)
    	at javax.faces.component.UIComponent.visitTree(Unknown Source)
    	at javax.faces.component.UIForm.visitTree(Unknown Source)
    	at javax.faces.component.UIComponent.visitTree(Unknown Source)
    	at javax.faces.component.UIComponent.visitTree(Unknown Source)
    	at com.sun.faces.context.PartialViewContextImpl.processComponents(Unknown Source)
    	at com.sun.faces.context.PartialViewContextImpl.processPartial(Unknown Source)
    	at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:60)
    	at javax.faces.component.UIViewRoot.processValidators(Unknown Source)
    	at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(Unknown Source)
    	at com.sun.faces.lifecycle.Phase.doPhase(Unknown Source)
    	at com.sun.faces.lifecycle.LifecycleImpl.execute(Unknown Source)
    	at javax.faces.webapp.FacesServlet.service(Unknown Source)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442)
    	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1083)
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640)
    	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:745)
     
    avr. 17, 2017 9:42:31 PM com.sun.faces.lifecycle.ProcessValidationsPhase execute
    AVERTISSEMENT: java.lang.NullPointerException
    javax.faces.FacesException: java.lang.NullPointerException
    	at com.sun.faces.context.PartialViewContextImpl.processPartial(Unknown Source)
    	at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:60)
    	at javax.faces.component.UIViewRoot.processValidators(Unknown Source)
    	at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(Unknown Source)
    	at com.sun.faces.lifecycle.Phase.doPhase(Unknown Source)
    	at com.sun.faces.lifecycle.LifecycleImpl.execute(Unknown Source)
    	at javax.faces.webapp.FacesServlet.service(Unknown Source)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442)
    	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1083)
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640)
    	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:745)
    Caused by: java.lang.NullPointerException
    	at com.it4all.giep.core.controller.GroupeConverter.getAsObject(GroupeConverter.java:33)
    	at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(Unknown Source)
    	at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectOneValue(Unknown Source)
    	at com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(Unknown Source)
    	at javax.faces.component.UIInput.getConvertedValue(Unknown Source)
    	at javax.faces.component.UIInput.validate(Unknown Source)
    	at javax.faces.component.UIInput.executeValidate(Unknown Source)
    	at javax.faces.component.UIInput.processValidators(Unknown Source)
    	at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(Unknown Source)
    	at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(Unknown Source)
    	at javax.faces.component.UIComponent.visitTree(Unknown Source)
    	at javax.faces.component.UIComponent.visitTree(Unknown Source)
    	at javax.faces.component.UIForm.visitTree(Unknown Source)
    	at javax.faces.component.UIComponent.visitTree(Unknown Source)
    	at javax.faces.component.UIComponent.visitTree(Unknown Source)
    	at com.sun.faces.context.PartialViewContextImpl.processComponents(Unknown Source)
    	... 27 more
     
    avr. 17, 2017 9:42:31 PM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
    GRAVE: java.lang.NullPointerException
    	at com.it4all.giep.core.controller.GroupeConverter.getAsObject(GroupeConverter.java:33)
    	at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(Unknown Source)
    	at com.sun.faces.renderkit.html_basic.MenuRenderer.convertSelectOneValue(Unknown Source)
    	at com.sun.faces.renderkit.html_basic.MenuRenderer.getConvertedValue(Unknown Source)
    	at javax.faces.component.UIInput.getConvertedValue(Unknown Source)
    	at javax.faces.component.UIInput.validate(Unknown Source)
    	at javax.faces.component.UIInput.executeValidate(Unknown Source)
    	at javax.faces.component.UIInput.processValidators(Unknown Source)
    	at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(Unknown Source)
    	at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(Unknown Source)
    	at javax.faces.component.UIComponent.visitTree(Unknown Source)
    	at javax.faces.component.UIComponent.visitTree(Unknown Source)
    	at javax.faces.component.UIForm.visitTree(Unknown Source)
    	at javax.faces.component.UIComponent.visitTree(Unknown Source)
    	at javax.faces.component.UIComponent.visitTree(Unknown Source)
    	at com.sun.faces.context.PartialViewContextImpl.processComponents(Unknown Source)
    	at com.sun.faces.context.PartialViewContextImpl.processPartial(Unknown Source)
    	at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:60)
    	at javax.faces.component.UIViewRoot.processValidators(Unknown Source)
    	at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(Unknown Source)
    	at com.sun.faces.lifecycle.Phase.doPhase(Unknown Source)
    	at com.sun.faces.lifecycle.LifecycleImpl.execute(Unknown Source)
    	at javax.faces.webapp.FacesServlet.service(Unknown Source)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442)
    	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1083)
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640)
    	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    	at java.lang.Thread.run(Thread.java:745)

    J'attends votre aide.

  2. #2
    Membre expérimenté
    Bonjour,

    Dans le code
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public Object getAsObject(FacesContext context, UIComponent component,String value) {
             String str[] = value.split(",", 2);
     
                if (value != null && !value.trim().isEmpty()){
                     // Instanciation du model
                    Groupes groupe = new Groupes();
                   // System.out.println(str[1]);
                    System.out.println(value);
                   // Va chercher l'objet en base qui correspond à cet id
              groupe = groupeService.getGroupeById( Integer.parseInt(str[COLOR=#333333][[/COLOR]0]));


    tu testes si value est null après le value.split(...). Premier point à corriger.

    Ensuite, le str[0] peut être vérifié, ou directement avec le parseInt (qui peut renvoyer null).

    Si le groupeId est bon, alors le problème se pose ailleurs. Mais il faut d'abord en être sûr.

  3. #3
    Candidat au Club
    Probléme résolu
    Cincinnatus, Merci pour votre aide.
    En fait le split[0] prend la bonne valeure, ce qui est nul c'est le retour de la méthode getUtilisateurService() et c'est du à:
    -Avec le @FacesConverter on ne peut pas injecter des ressources la solution c'est de créer un managedbean qui implémente l'interface Converter