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]Masquer/afficher elements dans ModalPanel sur click


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 50
    Par défaut [RichFaces]Masquer/afficher elements dans ModalPanel sur click
    Bonjour la communauté
    J'ai un soucis qui me tracasse depuis quelques temps déjà. J'utilise un modalPanel (richFaces).
    J'ai 2 radios boutons qui devrait me permettre d'afficher des informations différentes quand l'un ou l'autre est coché.

    Mon problème c'est que ça ne marche pas alors que ca devrait

    Sur le radio bouton j'ai un listener qui met à jour la valeur des propriétés rendered des bloc à afficher. Ca ça marche.
    la balise a4jsupport devrait mettre à jour l'affichage sur le clique mais ça ne marche pas, il faut un submit pour que l'affichage se fasse.

    Si je mets un Onclick sur le radiobouton avec un submit du formulaire ça marche mais le modalPanel est fermé.
    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
     
    <h:form id="frm_transfert">
    <div >
    	<div style="width:30%;float: left;text-align:left;">
     
    	<h:selectOneRadio  id="checkTransfert" style="font: inherit;"  valueChangeListener="#{infoChassisBean.evenementChoixTransfert}" value="#{infoChassisBean.radioValue}" layout="pageDirection"  >
           <a4j:support event="onclick" reRender="panelSepare,panelInstalle"/>
    	    <f:selectItems value="#{infoChassisBean.choix}"  />
    	</h:selectOneRadio>
     
    	</div>
    	<div  style="width:70%;float: right;">	
    		<h:panelGrid id="panelSepare" columns="2"  style="font: inherit;"  rendered="#{infoChassisBean.affBlocSepare}">
    			<h:outputText value="Transférer  "/>
    			<h:graphicImage value="/images/step-Forward.png"/>
    		</h:panelGrid>
     
    		<h:panelGrid id="panelInstalle" columns="3"  style="font: inherit;" rendered="#{infoChassisBean.affBlocInstalle}">
    			<h:outputText value="Traveller systeme : "/>
    			<h:inputText value=""/>
    			<h:graphicImage value="/images/step-Forward.png"/>
    		</h:panelGrid>
    	</div>
    </div>
    </h:form>
    code du listener
    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
     
    public void evenementChoixTransfert(ValueChangeEvent evt) {
     
            final PhaseId phaseId = evt.getPhaseId();
    	final String newValue = (String) evt.getNewValue();
    	if (phaseId.equals(PhaseId.ANY_PHASE))
    	{
    		evt.setPhaseId(PhaseId.UPDATE_MODEL_VALUES);
    		evt.queue();
    	}
    	else if (phaseId.equals(PhaseId.UPDATE_MODEL_VALUES))
    	{
    	        if(newValue.equals(INSTALLE)){
    		affBlocInstalle = true;
    		affBlocSepare = false;
    	 }else if(newValue.equals(SEPARE)){
    	    	affBlocInstalle = false;
    	    	affBlocSepare = true;
    	}
    	 FacesContext.getCurrentInstance().renderResponse(); 
    }
     
    	}
    Merci

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Hello,

    Au lieu d'avoir :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        <div  style="width:70%;float: right;">    
            <h:panelGrid id="panelSepare" columns="2"  style="font: inherit;"  rendered="#{infoChassisBean.affBlocSepare}">
                ...
            </h:panelGrid>
     
            <h:panelGrid id="panelInstalle" columns="3"  style="font: inherit;" rendered="#{infoChassisBean.affBlocInstalle}">
                ...
            </h:panelGrid>
        </div>

    et de faire un reRender sur tes 2 panelGrid, il faut plutôt faire ceci :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        <h:panelGroup id="monPanneau" layout="block" style="width:70%; float: right;">    
            <h:panelGrid id="panelSepare" columns="2"  style="font: inherit;"  rendered="#{infoChassisBean.affBlocSepare}">
                ...
            </h:panelGrid>
     
            <h:panelGrid id="panelInstalle" columns="3"  style="font: inherit;" rendered="#{infoChassisBean.affBlocInstalle}">
                ...
            </h:panelGrid>
        </h:panelGroup>

    puis utiliser le reRender="monPanneau" plutôt.

    Le code HTML généré est identique mais ça marchera mieux.
    En effet, dans ton premier code, dans le cas où le premier rendered est true, le second false, et bien ton second tableau (panelGrid) n'existe pas du tout dans le code HTML.
    Du coup, il ne sera pas possible de le rafraichir avec de l'Ajax, puisque le moteur Ajax cherchera dans le DOM l'élément à l'ID "panelInstalle" afin de le rafraichir, mais il ne le trouvera pas.
    L'idée est donc d'englober les 2 tableaux dans un DIV (<h:panelGroup layout="block") puis de rafraichir cet élément, qui est toujours présent (seul son contenu change).


    Sinon, concernant ton listener, je trouve ça très laid de jouer comme ça avec les phases.
    Et puis un ValueChangeListener est toujours exécuté à la phase de Validation, donc ton code me parait plutôt louche...

    Il faudrait plutôt faire ceci :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        <h:selectOneRadio id="checkTransfert" value="#{infoChassisBean.radioValue}" layout="pageDirection">
            <a4j:support event="onclick" reRender="monPanneau" actionListener="#{infoChassisBean.evenementChoixTransfert}"/>
            <f:selectItems value="#{infoChassisBean.choix}"  />
        </h:selectOneRadio>

    et du coup simplifier le code Java pour avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void evenementChoixTransfert(ActionEvent evt)  {
        if (radioValue.equals(INSTALLE)) {
            affBlocInstalle = true;
            affBlocSepare = false;
        } else if (radioValue.equals(SEPARE)) {
            affBlocInstalle = false;
            affBlocSepare = true;
        }
    }
    Normalement ça devrait être bon comme ça...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 50
    Par défaut
    Super ça marche, c'était pourtant simple
    Pour le listener je suis d'accord, j'avais fait comme tu le suggerais mais à force de chercher à droite à gauche sur le net. Ca pourri pas mal le code

    J'ai tout remis d'équerre merci beaucoup pour ton aide plus qu'éfficace.

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

Discussions similaires

  1. afficher du contenu seulement sur click
    Par laurentSc dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 31/08/2013, 22h16
  2. afficher element dans jtable
    Par gentelmand dans le forum Composants
    Réponses: 9
    Dernier message: 01/01/2010, 22h52
  3. Masquer / Afficher panelGrid dans ModalPanel
    Par burin_khazad dans le forum JSF
    Réponses: 38
    Dernier message: 18/06/2009, 15h59
  4. Changement sur click dans un element d'une liste
    Par titeZ dans le forum VBA Access
    Réponses: 1
    Dernier message: 07/10/2007, 08h13
  5. [CSS][IE]background d'affiche pas dans div sur IE
    Par Thomzz dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 21/09/2005, 23h32

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