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 :

CommandLink action non exécutée


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 146
    Par défaut CommandLink action non exécutée
    Bonjour à tous,

    j'ai un problème avec un commandlink. En fait j'ai une page (paysage.xhtml) qui se "découpe" en 2 partie. La premiere est une fonction de recherche qui retroune à l'utilisateur 0 à plusieurs résultats. La seconde partie est un affichage de tous les serveurs disponible pour un paysage particulier.

    J'utilise des commandlink que se sois dans la recherche ou bien pour l'affichage de base. Leurs codes sont identique. Néanmoins mes commandlink fonctionnent parfaitement au niveau de la recherche, et pas du tout au niveau du reste de ma page. Quand je dis qu'ils ne fonctionnent pas c'est qu'ils n'exécutent pas l'action et se contentent de recharger ma page.

    Comme cette page est assez conséquente j'ai tenté de regrouper dans une page test ma fonction de recherche et mon affichage uniquement. C'est alors qu'est apparue une erreur. Elle n'était tout simplement jamais ressortie dans ma console sur ma vraie page :

    Cannot create a session after the response has been committed

    Après pas mal de recherches et de test j'ai finalement téléchargé la nouvelle version de Mojarra. Et la ma page de test se met à fonctionner correctement. Je switch et je repart sur ma page paysage.xhtml et aucun changement (pas d'erreur non plus, mais bon comme elle est jamais apparue...).

    Donc finalement je ne sais pas si mon problème est du
    - à une mauvaise utilisation du commandlink (j'y crois moyen)
    - ou a un probleme car mon buffer de sortie est trop gros

    Autre truc, qui me fait penser que mon problème viens du second cas, c'est que quand le commandlink recharche ma page, il le fait avec des erreurs. Enfin aucunes dans la console, ou visuellement pour un utilisateur. C'est juste qu'il ne m'affiche plus les serveurs que je devrais voir, et que dans ma console lors des appel SQL il a perdu certains parametres.

    Je vous join le code de ma page :
    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
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml" 
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:ui="http://java.sun.com/jsf/facelets"
    	xmlns:p="http://primefaces.org/ui"
    	xmlns:f="http://java.sun.com/jsf/core">
    	 
    	<h:head>
    		<meta charset="utf-8"/>
    		<title>Un super titre</title>
    
    		<meta name="description" content="Une super description !"/>
    		
    		<h:outputStylesheet name="css/main.css"  />
    		<h:outputStylesheet name="css/layout.css"  />
    		<h:outputStylesheet name="css/font.css"  />
    		<h:outputStylesheet name="css/web.css"  />
    		<h:outputStylesheet name="css/test.css"  />
    		<h:outputStylesheet name="css/galerie.css"  />
    		<h:outputStylesheet name="css/style.css"  />
    		<h:outputStylesheet name="css/test2.css"  />
    		
    		<!-- pour centrer les boites  -->
    		<script type="text/javascript">
    			 // <![CDATA[
    			function setContainerSize(name) 
    			{
    				var navroot = document.getElementById(name);
    				if ( navroot ) 
    				{
    					var lis = navroot.getElementsByTagName("div");
    					var ok = 0; 
    					for ( i = 0; i < lis.length; i++ ) {
    						if ( lis[i].parentNode == navroot )
    							ok++;
    					}
    					navroot.style.width = ok * 70 + 10 + 'px';
    				}
    			}
    			 // ]]>
    		</script>
    
    	</h:head>
    	
    	<h:body onload="setContainerSize('c1');setContainerSize('c2');setContainerSize('c3');setContainerSize('c4');setContainerSize('c5');setContainerSize('c6');setContainerSize('clegende')">
    		<f:event type="javax.faces.event.PreRenderViewEvent" listener="#{pagePaysageBean.preRenderView}"/>
    		
    		<div id="headercontainer">
    			<ui:insert name="header">
    				<ui:include src="/template/header.xhtml" />
    			</ui:insert>
    		</div>
    
    		<h:form>
    			<div id="menu1container">
    				<div id="subMenu1">
    					<div data-container="navigation">					
    						<ul class="mainNav1">
    							<li>
    								<a href="index.xhtml" class="current level_1">
    									<span>Accueil</span>
    								</a>
    							</li>
    							
    							<ui:repeat var="p" value="#{pagePaysageBean.getListePaysage()}">
    								<li>
    									<h:commandLink action="paysage" value="#{p.nomPaysage}">
    										<ui:param name="paysParam" value="#{p}"/>
    									</h:commandLink>
    								</li>
    							</ui:repeat>
    							 
    							 <li>
    								<a href="administration.xhtml" class="level_1">
    									<span>Administration</span>
    								</a>
    							</li>
    						</ul>
    					</div>
    				</div>
    			</div>
    	
    			<div id="troiscols">
    				<div id="centre">
    					<div id="content_area" data-container="content">
    						<div id="content_start">
    						</div>
    						
    						<p:messages autoUpdate="true" style="color:red;margin:8px;" />
    						
    						<ui:param name="idPays" value="#{paysParam.idPaysage}"/>
    						<ui:param name="pays" value="#{paysParam}"/>
    						
    						<p:messages id="message" for="message" showDetail="true" autoUpdate="true" closable="true" />                            
    					    <h:panelGrid id="num1" columns="3" cellspacing="10" style="float:right;">
    					        <h:outputLabel for="name" value="SID / Pays :" style="font-weight:bold"/> 					          
    					        <p:inputText id="name" value="#{pagePaysageBean.nom}" />  					          
    					        <p:commandButton id="btn" value="Rechercher" update="display" actionListener="#{pagePaysageBean.rechercher}"/>  					  
    					    </h:panelGrid>
    	
    						<br></br>
    						<br></br>
    						<br></br>
    							 
    						 <h:panelGroup id="display">
    						 	<div class="galerie">	
    								<div class="conteneur" id="crecherche">
    									 <ui:repeat var="inst" value="#{pagePaysageBean.getInsts()}">
    									 	<div class="boite#{inst.idType.idType}" id="recherche#{inst.sid}">
                                                                                        
    										    <p:commandLink id="recherche">  
    										        <h:outputText value="#{inst.sid}" style="color:black;"/>  
    										    </p:commandLink>
    										</div> 
    											
    										<p:overlayPanel id="panere#{inst.sid}" for="recherche" hideEffect="fade">  
    									        #{inst.sid} <br></br>
    									        <br></br>
    									        Action 1 <br></br>
    									        Action 2 <br></br>
    									        Action 3 <br></br>	
                                                                                    <!-- ici sa fonctionne -->							    
    									        <h:commandLink action="instance" value="Informations">
    												<ui:param name="instanceParam" value="#{inst}"/> 
    											</h:commandLink>
    									    </p:overlayPanel>  
    									 </ui:repeat>
    									 <hr class="clear" />
    								</div>
    							</div>
    						 </h:panelGroup>
    					      	
    						<br></br>
    						<br></br>
    						<br></br>						
    												
    						<ui:repeat var="env" value="#{pagePaysageBean.getListeEnv()}">
    							<ui:param name="idEnv" value="#{env.idEnv}"/>
    							<div class="n">
    								<h1>
    									<a href="" id="div#{env.idEnv}">#{env.nomEnv}</a>
    								</h1>
    								
    								<div class="galerie">	
    									<div class="conteneur" id="c#{env.idEnv}">
    									
    										<ui:repeat var="i" value="#{pagePaysageBean.getListeInstance()}">
    											<div class="boite#{i.idType.idType}" id="b#{i.sid}">
    											    <p:commandLink id="lienInst">  
    											        <h:outputText value="#{i.sid}" style="color:black;"/> 
    											    </p:commandLink>
    											</div> 
    											
    											<p:overlayPanel id="pan#{i.sid}" for="lienInst" hideEffect="fade">  
    										        #{i.sid} <br></br>
    										        <br></br>
    										        Action 1 <br></br>
    										        Action 2 <br></br>
    										        Action 3 <br></br>
                                                                                             <!-- ici sa fonctionne pas -->
    										        <h:commandLink action="#{pagePaysageBean.goToInfo}" value="Informations">
    													<ui:param name="instanceParam2" value="#{i}"/> 
    												</h:commandLink>
    										    </p:overlayPanel>  
    											
    										</ui:repeat>
    										<hr class="clear" />
    									</div>
    								</div>
    							</div>
    							
    							<br></br>
    							<div class="hr"></div>
    							<br></br>
    							
    						</ui:repeat>
    							
    						<br></br>
    						<br></br>
    						<br></br>	
    						
    						<h2>
    							Légende
    						</h2>
    						
    						<div class="galerie">	
    							<div class="conteneur" id="clegende">
    								<ui:repeat var="ti" value="#{pagePaysageBean.getListeTypeInst()}">
    									<div class="boite#{ti.idType}">
    										#{ti.nomType}
    									</div>
    								</ui:repeat>
    								<hr class="clear" />
    							</div>
    						</div>	
    					</div>
    				</div>				
    			</div>
    		</h:form>
    		
    		<div id="footer2">
    			<ui:insert name="footer">
    				<ui:include src="/template/footer.xhtml"/>
    			</ui:insert>
    		</div>
    		
    	</h:body>
    </html>
    A noter que ma class PagePaysageBean est en ViewScoped et que la fonction goToInfo retourne "instance". J'ai juste créer cette fonction pour voir si elle était exécuté ou non.

    Si vous avez une idée je vous écoute ^^ Merci

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    Déjà j'ai remarqué dans ton code que parfois tu utilises p:commandLink et parfois h:commandLink les deux fonctionnent mais parfois cela peux générer une forte confusion et parfois des erreurs.
    De plus le p:commandLink te permet de rafraichir une partie donnée de ta page avec "update", propriété que tu ne trouve pas sur h:commandLink.

    Cependant tout cela n'a rien avoir avec ton problème, enfin je ne le pense pas !
    Il est possible que le problème vienne du repeat, si tu le supprime et que tu mets juste un commandLink est ce que cela change quelque chose ?
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 146
    Par défaut
    Le problème c'est que je m'inspire (pique) de pleins de codes différents. Je teste pleins de composants sans vraiment savoir ce qu'il y a derriere car même quand on les prend sur des sites comme primesFaces la description est assez succinte...

    Enfin bref, je viens de trouver pourquoi sa plantait.

    Tout sa pour dire qu'avant j'avais dans mon bean ce genre de chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
         public List<Paysage> getListePaysage()
        { 
            _paysages = new ArrayList<Paysage>();
        	_paysages = _paysageDao.lister();
        	return _paysages;
        }
    Que j'ai modifié par sa :

    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
     
         @PostConstruct
         public void init() 
        {       
            _paysages = new ArrayList<Paysage>();
          	_paysages = _paysageDao.lister();	
        }
     
         public List<Paysage> getListePaysage()
        {
    		if (_paysages == null)
    		{
    		    _paysages = new ArrayList<Paysage>();
    	    	     _paysages = _paysageDao.lister();
    		}
        	return _paysages;
        }
    J'avais plus ou moins 5 listes de ce genre que j'initialisaient dans mes getters, sans condition, donc à chaque fois. En sois je ne vois pas trop ce que sa change mais sa fait la différence comme sa fonctionne. Je me doute que sa fait moins de charge pour la base de donnée mais j'aimerais en savoir plus.

    Si quelqu'un à une explication ?

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Au moins j'étais pas loin de la verité !

    Deux éléments sont important je pense:
    - le premier étant le "view scope" tout simplement parce que a chaque itération tu pourrais avoir un bean différent
    - le deuxième étant que entre chaque itération tu aura une instance de ta liste qui sera différent

    petite rectification :
    ton getteur ne doit pas faire le test sur la variable _paysages, tu dois juste avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public List<Paysage> getListePaysage()
        {
        	return _paysages;
        }
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    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 : 45
    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
    Il y a deux raisons principale, à toi d'identifier, qui peuvent pousser un action à ne pas être exécutée:


    1) le formulaire échoue à la validation: si tu n'affiche pas les erreur avec un h:messages par exemple, tu ne le saura jamais
    2) le bouton d'action se trouve dans une partie de l'arbre xml qui n'existe plus: par exemple tu fais ta recherche, tu associe l'action à une ligne de résultat, tu sooumet et "hop", comme la recherche était en request scope, il y a maintenant 0 résultat, donc plus de bouton, donc pas d'action, donc on ne fait rien.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 146
    Par défaut
    Ok merci beaucoup.

    Je vais re-modifier tous mes getter en conséquence alors ^^

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

Discussions similaires

  1. [MySQL] Requête non exécutée
    Par harlock59 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/05/2006, 15h42
  2. On error goto Err : goto non exécutée au 2ème appel
    Par charliejo dans le forum Access
    Réponses: 1
    Dernier message: 11/04/2006, 15h00
  3. [Struts]Variable dans une action non réinitialisé
    Par brousaille dans le forum Struts 1
    Réponses: 7
    Dernier message: 15/01/2006, 00h53
  4. [Struts][Débutant]Servlet Action non dispo ?
    Par Ho(c)ine. dans le forum Struts 1
    Réponses: 7
    Dernier message: 09/04/2004, 08h06
  5. INCLUDE non exécuté
    Par Sadneth dans le forum ASP
    Réponses: 3
    Dernier message: 07/09/2003, 00h44

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