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

JSF Java Discussion :

Richfaces : Utilisation de a4j:support dans un selectOneMenu


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 29
    Par défaut Richfaces : Utilisation de a4j:support dans un selectOneMenu
    Bonjour,

    J'essaie d'appeler une méthode lorsque la valeur d'une liste change mais j'ai un nullPointerException lorsque j'utilise le tag a4j:support. Aussi un peu d'aide ne serait pas de refus.

    Voilà ma jsp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <h:outputText value='Gestionnaire : '/>
    <h:selectOneMenu id='selectLDAP' value="#{adminGestionnaireController.gestionnaire.uId}">
    <f:selectItems value="#{adminGestionnaireController.listeStringGestionnaireLDAP}"/>
    <a4j:support event="onchange" actionListener="#{adminGestionnaireController.test}" immediate="true"/></h:selectOneMenu>
    Et l'erreur que j'ai dès que j'arrive sur la page :

    java.lang.NullPointerException
    javax.faces.component.UIComponentBase.findComponent(UIComponentBase.java:564)
    org.ajax4jsf.component.EventValueExpression.getComponent(EventValueExpression.java:98)
    org.ajax4jsf.component.AbstractEventValueExpression.getValue(AbstractEventValueExpression.java:98)
    javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
    javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
    javax.faces.component.html.HtmlSelectOneMenu.getOnchange(HtmlSelectOneMenu.java:271)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 40
    Par défaut
    Essaye plutôt ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <h:selectOneMenu id='selectLDAP' value="{adminGestionnaireController.gestionnaire.uId}" valueChangeListener="#{adminGestionnaireController.test}">
           <f:selectItems value="#{adminGestionnaireController.listeStringGestionnaireLDAP}"/>
           <a4j:support event="onchange" immediate="true" ajaxSingle="true"/>
    </h:selectOneMenu>

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 29
    Par défaut
    J'ai exactement la même erreur

    Je ne vois pas d'où ça peut venir vu que le a4j:support est encapsulé dans le UIComponent concerné...

  4. #4
    Membre éprouvé Avatar de juridakus
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Par défaut
    Citation Envoyé par Pepps Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ...
    <a4j:support event="onchange" actionListener="#{adminGestionnaireController.test}" immediate="true"/></h:selectOneMenu>
    Et l'erreur que j'ai dès que j'arrive sur la page :
    Je crois que ton NPE est causé par "immediate=true". Si tu lis la suite de la trace d'erreur tu veras la cause généralement après "caused by..."
    Si tu veux éviter que JSF valide d'autres composants sur la page tu peux effectivement utiliser la propriété "ajaxSingle = true".

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 40
    Par défaut
    Oups, dans mon copier coller, j'ai effectivement oublié d'enlever le "immediate=true" après avoir rajouté le ajaxSingle.

    La cause de l'erreur est surement là en effet.
    Si ça ne fonctionne pas, peut-être que la trace complète du log nous aiderait

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 29
    Par défaut
    Bonjour,

    J'ai toujours la même erreur après correction du immediate="true".

    Voici la trace complète des log :

    exception

    javax.servlet.ServletException
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:325)
    org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
    org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
    org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
    cause mère

    java.lang.NullPointerException
    javax.faces.component.UIComponentBase.findComponent(UIComponentBase.java:564)
    org.ajax4jsf.component.EventValueExpression.getComponent(EventValueExpression.java:98)
    org.ajax4jsf.component.AbstractEventValueExpression.getValue(AbstractEventValueExpression.java:98)
    javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
    javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
    javax.faces.component.html.HtmlSelectOneMenu.getOnchange(HtmlSelectOneMenu.java:271)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    javax.faces.component.UIComponentBase$AttributesMap.get(UIComponentBase.java:2146)
    com.sun.faces.renderkit.RenderKitUtils.renderOnchange(RenderKitUtils.java:349)
    com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:859)
    com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:296)
    javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
    javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613)
    javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
    org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:277)
    org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258)
    org.ajax4jsf.renderkit.html.AjaxOutputPanelRenderer.encodeChildren(AjaxOutputPanelRenderer.java:78)
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
    org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:277)
    org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:166)
    org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxChildren(AjaxChildrenRenderer.java:83)
    org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:157)
    org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxChildren(AjaxChildrenRenderer.java:83)
    org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:157)
    org.ajax4jsf.renderkit.AjaxContainerRenderer.encodeAjax(AjaxContainerRenderer.java:124)
    org.ajax4jsf.component.AjaxViewRoot.encodeAjax(AjaxViewRoot.java:685)
    org.ajax4jsf.component.AjaxViewRoot.encodeChildren(AjaxViewRoot.java:556)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613)
    com.sun.faces.application.view.JspViewHandlingStrategy.doRenderView(JspViewHandlingStrategy.java:420)
    com.sun.faces.application.view.JspViewHandlingStrategy.renderView(JspViewHandlingStrategy.java:209)
    com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
    org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
    org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
    org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
    org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
    org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
    Et le code de mon modalPanel en entier :

    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
    <rich:modalPanel id="panelUbCcGestionnaire" width="650" height="450">
    	<f:facet name="header">
    		<h:outputText value="Associations UbCc du gestionnaire" />
    	</f:facet>
    	<f:facet name="controls">
    		<h:graphicImage value="../IMG/close.png"
    style="cursor:pointer"
    onclick="#{rich:component('panelUbCcGestionnaire')}.hide()" />
    	</f:facet>
    	<a4j:outputPanel id="formAfficheUbCcGestionnaire">
    	<h:form>
    	<table>
    		<tr><td>
    			<h:outputText value ="Gestionnaire : #{adminGestionnaireController.gestionnaire.nom} #{adminGestionnaireController.gestionnaire.prenom}"/>
    		</td></tr>
    		<tr><td>
    		<h:form>
    			<h:outputText value='Couple Ub/Cc : '/>
    			<h:selectOneMenu id='selectUbCc' value="#{adminGestionnaireController.my_ubcc}" valueChangeListener="#{adminGestionnaireController.testUbCc}">
    				<f:selectItems value="#{adminGestionnaireController.ubCentreDeCout}"/>
    				<a4j:support event="onchange" ajaxSingle="true"/>
    			</h:selectOneMenu>
    			<a4j:commandButton value ="Ajouter" reRender="tableUbCc"></a4j:commandButton>
    		</h:form>
    		</td></tr>
    		<tr><td>
    			<rich:scrollableDataTable id="tableUbCc" rowKeyVar="rkv"
                    width="550" columnClasses="col" rows="10" value="#{adminGestionnaireController.listeGestionnaires}" var="gestionnaire" sortMode="single">
                    </rich:scrollableDataTable>
    		</td></tr>
    	</table>	
    	</h:form> 
    	</a4j:outputPanel>
     </rich:modalPanel>

  7. #7
    Membre éprouvé Avatar de juridakus
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Par défaut
    Je vois qu'en plus du <a4j:support event="onchange" ... /> il y a aussi un valueChangeListener est-ce que c'est pour le même appel?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    <h:selectOneMenu id='selectUbCc' value="#{adminGestionnaireController.my_ubcc}" valueChangeListener="#{adminGestionnaireController.testUbCc}">
    				<f:selectItems value="#{adminGestionnaireController.ubCentreDeCout}"/>
    				<a4j:support event="onchange" ajaxSingle="true"/>
    </h:selectOneMenu>
    Sinon serait il possible de modifier ton <rich:modalPanel> pour avoir un seul formulaire <h:form> et de déplacer le <a4j:outputPanel> juste pour encapsuler le <rich:scrollableDataTable>.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 29
    Par défaut
    Le valueChangeListener et le va4j:support event="onchange".../> sont bien là pour le même appel.

    J'ai effectué les changement que tu m'as demandé dans mon modalPanel. Ma méthode testUbCc est maintenant bien appelée mais ma valeur my_ubCc n'est pas renseignée. Je continue de chercher pour résoudre ces petits soucis.

    Voici le code de mon nouveau modalPanel :

    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
    <rich:modalPanel id="panelUbCcGestionnaire" width="650" height="450">
    		<f:facet name="header">
    			<h:outputText value="Associations UbCc du gestionnaire" />
    		</f:facet>
    		<f:facet name="controls">
    			<h:graphicImage value="../IMG/close.png" style="cursor:pointer" onclick="#{rich:component('panelUbCcGestionnaire')}.hide()" />
    		</f:facet>
     
     
    		<table>
    			<tr><td>
    				<h:outputText value ="Gestionnaire : #{adminGestionnaireController.gestionnaire.nom} #{adminGestionnaireController.gestionnaire.prenom}"/>
    			</td></tr>
    			<tr><td>
    			<h:form>
    				<h:outputText value='Couple Ub/Cc : '/>
    				<h:selectOneMenu id='selectUbCc' value="#{adminGestionnaireController.my_ubcc}" valueChangeListener="#{adminGestionnaireController.testUbCc}">
    					<f:selectItems value="#{adminGestionnaireController.ubCentreDeCout}"/>
    					<a4j:support event="onchange" ajaxSingle="true"/>
    				</h:selectOneMenu>
    				<a4j:commandButton value ="Ajouter" reRender="tableUbCc"></a4j:commandButton>
    			</h:form>
    			</td></tr>
    			<tr><td>
    			<a4j:outputPanel id="formAfficheUbCcGestionnaire">
    				 <rich:scrollableDataTable id="tableUbCc" rowKeyVar="rkv"
                    width="550" columnClasses="col" rows="10" value="#{adminGestionnaireController.listeGestionnaires}" var="gestionnaire" sortMode="single">
                    </rich:scrollableDataTable>
                    </a4j:outputPanel>
    			</td></tr>
    		</table>	
     
     
       	</rich:modalPanel>
    Merci de l'aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/05/2013, 16h19
  2. Réponses: 2
    Dernier message: 11/02/2011, 16h14
  3. Réponses: 3
    Dernier message: 11/02/2011, 09h18
  4. h:selectOneMenu, a4j:support et actionListener
    Par snipes dans le forum JSF
    Réponses: 6
    Dernier message: 18/11/2009, 16h39
  5. [Richfaces] SetRendered et a4j:support
    Par aigleborgne dans le forum JSF
    Réponses: 1
    Dernier message: 29/12/2008, 17h02

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