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 :

problème de visibilité d'un champ lors de la validation


Sujet :

JSF Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 19
    Par défaut problème de visibilité d'un champ lors de la validation
    bonjour,
    Je développe en JSF/richfaces, mon problème est le suivant :
    j'utilise un affichage dynamique de composant suivant la valeur renseignée sur un combobox: en fonction de la valeur renseignée j'affiche les champs correspondant sur le formulaire grâce à une raquette ajax reRender sur une balise <a4j:outputPanel> et l'attribut rendered. Le problème est que lorsque je valide ma page(subnmit) et j'appel mon action du manageBean les champs ne sont prise en compte que lors du deuxième action submit : la première fois que j'appuis sur le bouton de validation touts mes champs du formulaire sont prise en compt à l'éxception des champs contenu dans la balise <a4j:outputPanel>, qui auront la valeurs saisie que lors de la deuxième validation.
    je sais qui à parmis vous des expertes, j'ai besoin de vous, aidez moi
    cordialement

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Peux tu enlever le outPutPanel et mettre simplement des rendered sur les champs visibles selon le résultat de tes traitements? , ah oui mais je pense que peut être une fois la page affichée, même si tu rafraichis l'id du composant à faire apparaitre il n'apparaitra pas toujours, mais essaie quand même voir...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 19
    Par défaut
    merci pour ta réponse,
    Je crois que c'est un problème de validation des champs du formulaire par JSF ou les champs ne seront visibles qu'au bout de la deuxième validation.J'arrive quand même à contourner le problème en utilisant l'attribut disable mais cela correspond pas vraiment à la demande client.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 19
    Par défaut
    Auriez vous une solution à me proposer pour ce problème

  5. #5
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    un bout de code nous aidera à comprendre..

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    si t'as basiquement ce genre de code
    <h:selectOneMenu value="#{bean.selected}" .../>
    ....
    <h:outputPanel rendered="#{bean.selected eq xyz}"/>
    Ca ne peux pas marcher, car lors du submit, lors de la première phase (apply request value) bean.selecte n'aura pas encore sa nouvelle valeur. Donc le redered s'évaluera à false. A partir de là, le outputPanel sautera le reste de la phase JSF jusqu'au rendu final ou il réapparaitra, sans avoir récupéré les valeur soumises.


    Pour résoudre ce problème, il faut mettre un immediate="true" sur le selectOneMenu, afin que le selectOneMenu stocke sa valeur dans le bean avant que le outputPanel ne fasse sa première phase JSF.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 19
    Par défaut
    bonjour,
    voila un cas simple qui résume mon problème
    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
     
        <h:selectOneRadio id="suivitProjetPro" 	immediate="true"
     value="#{projetPro.dataBean.nmProjetValider}"
    layout="lineDirection" onchange="javascript:modifDetecteurSaisie(this)">
    <f:selectItem id="projet1" itemLabel="#{ins.lbProjet1}"
    							itemValue="1" />
    <f:selectItem id="projet2" itemLabel="#{ins.lbProjet2}"
    							itemValue="2" />
    <f:selectItem id="projet3" itemLabel="#{ins.lbAutreProjet}"
    							itemValue="3" />
     
    <a4j:support ajaxSingle="true"  event="onclick"
    							action="#{projetPro.rerender}" reRender="updateprojet3" />
    	</h:selectOneRadio>
    <!-- liste des champs à rafraichir -->
     
    <a4j:outputPanel id="updateprojet3">
    <h:panelGrid columns="4"
    						columnClasses="labelInputTab5,colorInputTab5,labelInputTab5,colorInputTab5"
    styleClass="colonneGridStyle" rendered="#{projetPro.showProjet3}" >
    <h:outputText value="#{ins.lbSecteur} : " />
    <rich:comboBox id="listSecteurActiviteEquipePed"
    suggestionValues="#{projetPro.dataBean.listSecteurAct}"
    defaultLabel="#{projetPro.dataBean.lbSecteurAct3}"
    selectFirstOnUpdate="true"
    value="#{projetPro.dataBean.lbSecteurAct3}"
    directInputSuggestions="true"  onblur="javascript:modifDetecteurSaisie(this)" immediate="true"/>
    <h:outputText value="#{ins.lbMetier} : " />
    <h:inputText id="metierProjetProEquipePed"
    value="#{projetPro.dataBean.lbMetier3}" immediate="true" onchange="javascript:modifDetecteurSaisie(this)">
     
    </h:inputText>
    </h:panelGrid>
    </a4j:outputPanel>
    J'affiche le contenu compris dans la balise <a4j:outputPanel> selon les valeurs du <h:selectOneRadio >, les champs ne sont visible qu'au bout du deuxième submit

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    comment fonctionnent la méthode projetPro.showProjet3?
    De plus, les champs qui dépendent de ta radio ne doivent pas etre en immediate, sinon tu aura toujours le meme problème. La radio doit etre traitée avant ce qui en dépend.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 19
    Par défaut
    la méthode showProjet3 permet de faire le traitement qui aboutie à l'affichage ou non des élements contenu dans la balise <a4j:outputPanel>, je pouvez faire le traitement sur la page xhtml en utilisant le EL, mais ça rend la page illisible.
    Donc l'attribut immediat est à mettre dans le champ source de rafraichissement? et pourquoi ca marche dans le cas ou j'utilise l'attribut disable?

  10. #10
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    contrairement à l'attribute rendered, l'attribut disable n'a aucune influence sur la phase "Apply Request Value". Il n'en aura que sur les phases de render (pour dessiner en disable), de conversion et de transfert au bean (il va sauter ces deux phases)

  11. #11
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Je ne sais pas si tu fais comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ..
    <a4j:suppot ..reRender="panel" />
    ..
     
    <a4j:outputPanel  id="panel" rendered="#{bean.condition}">
    ...
     
    </a4j:outputPanel>
    le reRender ne fonctionnera pas, faire un reRender sur un composant qui est présent dans le DOM au moment de la requete. encapsule le tout dans un au tre outputPanel ou fait le rendered sur les composants fils.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 19
    Par défaut
    bonjour,
    Pour répondre à Sniper37, j'ai fais exactement ce que vous avez décrit sur votre message, mais appartement mon problème est avec jsf est ces phases de validation et j'arrive pas à trouver la solution,j'avais essayé avec l'attribut disable, mais je viens de remarquer un problème : ça marche pas pour tous les composants, les testes que j'ai effectuée jusqu'ici étais sur des <rich:combobox> et <rich:calendar>, mais pour les balises <h:inputText> et <h:inputTextarea> ça marche pas vraiment même en essayant d'autres atribut readonly !! je comprend rien!!
    aider moi !!

  13. #13
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    premièrement, retirer tous les immediate=true sauf sur le composant servant de base à choisir les autres composant (ton selectone)

    deuxièmement, nous dire si projetPro est un bean de session (je soupconne que c'est le cas vu ton comportement)

    troisièmement, nous donner le code de #{projetPro.showProjet3}

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 19
    Par défaut
    J'ai retiré tous les immediate=true sauf sur le composant selectone;
    projetPro est un bean de request ;
    pour la méthode showProjet3, il permet de vérifier une condition,pour le l'instant je met la condition directement dans l'attribut, je croix que c'est plus simple que d'utiliser cette méthode pour vérifier une condition.
    disabled="#{!(projetPro.dataBean.nmProjetValider eq 3)}

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 19
    Par défaut
    bonjour,
    j'espère que vous m'avez pas oublier pour mon problème, pour l'instant j'essaie de comprendre pourquoi l'attribut disable ne fonctionne pas pareille pour toutes les composant JSF, en particulier les champs de saisie de text.

  16. #16
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par tarikho Voir le message
    bonjour,
    j'espère que vous m'avez pas oublier pour mon problème, pour l'instant j'essaie de comprendre pourquoi l'attribut disable ne fonctionne pas pareille pour toutes les composant JSF, en particulier les champs de saisie de text.
    disable a le même fonctionnement pour tous les composants JSF, tu as peut être une erreur sur la condition ou sur le rafraichissement de la page.

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 19
    Par défaut
    voila mon code :
    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
    
    <h:selectOneRadio id="suivitProjetPro" 
      value="#{projetPro.dataBean.nmProjetValider}"
      layout="lineDirection" onchange="javascript:modifDetecteurSaisie(this)" immediate="true">
      <f:selectItem id="projet1" itemLabel="#{ins.lbProjet1}"
    		itemValue="1" />
      <f:selectItem id="projet2" itemLabel="#{ins.lbProjet2}"
    							itemValue="2" />
      <f:selectItem id="projet3" itemLabel="#{ins.lbAutreProjet}"
    							itemValue="3" />
    
        <a4j:support ajaxSingle="true"  event="onclick"
    		 reRender="updateprojet3" />
    </h:selectOneRadio>
    <a4j:outputPanel id="updateprojet3" ajaxRendered="true">
      <h:panelGrid columns="4"
        columnClasses="labelInputTab5,colorInputTab5,labelInputTab5,colorInputTab5"
        styleClass="colonneGridStyle"  >
        <h:outputText value="#{ins.lbSecteur} : " />
        <rich:comboBox id="listSecteurActiviteEquipePed"
          suggestionValues="#{projetPro.dataBean.listSecteurAct}"
          defaultLabel="#{projetPro.dataBean.lbSecteurAct3}"
          selectFirstOnUpdate="true" 	value="#{projetPro.dataBean.lbSecteurAct3}"
          directInputSuggestions="true" 
          disabled="#{!(projetPro.dataBean.nmProjetValider eq 3)}"
          onblur="javascript:modifDetecteurSaisie(this)"/>
        <h:outputText value="#{ins.lbMetier} : " />
    		
        <h:inputText  id="metierProjetPro3"
          value="#{projetPro.dataBean.lbMetier3}"
          onchange="javascript:modifDetecteurSaisie(this)" disabled="#{!(projetPro.dataBean.nmProjetValider eq 3)}" />
      </h:panelGrid>
    </a4j:outputPanel>
    Le champ que j'arrive pas à récupérer lors de l'action submit(), et colorer en jaune, il est active à la selection de choix n°3 du radiobutto.

  18. #18
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Il faut mettre le bean soit en session soit utiliser keepAlive

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a4j:keepAlive beanName="nomDuBean" />

  19. #19
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ton outputpanel a "ajaxRendered="true" ", ce qui explique probablement pourquoi il n'interviens pas dans le submit normal. Retire ce ajaxrendered, il ne sert à rien.

    De plus, est-ce que ton submit renvoie bien tout le formulaire, ou est-ce qu'il se contenter de soumettre seulement une partie.

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 19
    Par défaut
    merci,
    c'est super , vous êtes vraiment fort !!
    ça résout mon problème pour l'instant, j'espère que ça va pas avoir de dommage collatéral sur d'autres champs

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

Discussions similaires

  1. Problème de case qui se change lors de la validation de ligne
    Par kamix003 dans le forum Sql Developer
    Réponses: 3
    Dernier message: 30/05/2012, 15h42
  2. Réponses: 2
    Dernier message: 09/09/2009, 11h40
  3. [FLASH 8] probleme de visibilité d'un champ
    Par aldo-tlse dans le forum Flash
    Réponses: 1
    Dernier message: 12/10/2005, 15h09
  4. [TIBSQL] Problème de récupération d'un champs
    Par TitiFr dans le forum Bases de données
    Réponses: 6
    Dernier message: 07/08/2005, 13h33
  5. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56

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