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 :

Balise <h:commandLink> ne fonctionne pas


Sujet :

JSF Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Balise <h:commandLink> ne fonctionne pas
    Bonjour à tous,

    J'essaie actuellement via une balise <h:commandLink> de lancer une méthode contenue dans un de mes ManagedBean.

    Cette méthode est censée renvoyer le String de la page que l'utilisateur doit accéder.

    Malheureusement, lorsque je clique sur le lien, la page qui est lancée est celle sur laquelle l'utilisateur se trouve actuellement suivie d'un "#".

    Je vous laisse ci dessous les morceaux de code en rapport :

    ManagedBean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    @ManagedBean(name="listIncident")
    @SessionScoped
    public class ListIncidentBean {
     
    	private List<IncidentBDT> listInc = null ;
     
    	public String getIncidentByDefaultDomain(){
    		return "listIncidentVue?faces-redirect=true" ;
    	}
    Page sur laquelle le lien est trouvable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    			<div id="bloc_menu_v">
    				<h:form>
    				<ul class="sf-menu">
    					<li><a href="#">Incident</a>
    						<ul>
                       			<li><h:commandLink value="Par domaine" action="${listIncident.getIncidentByDefaultDomain}" /></li>
    							<li><h:commandLink value="Par sous-domaine" action="${listIncident.getIncidentByDefaultSSDomain}" /></li>
    							<li><h:commandLink value="Par période" action="${listIncident.getIncidentByDefaultDate}" /></li>
    						</ul>
    					</li>

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Il faut que ta méthode action retourne un outcome : une valeur sous forme de chaine de caractère par exemple.
    Puis il faut décrire un cas de navigation dans le faces-config.xml.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <navigation-rule>
        	<display-name>Nom de la rule</display-name>
        	<from-view-id>/vue1.jsp</from-view-id>
        	<navigation-case>
                    <from-action>#{bean.uneAction()}</from-action>
        		<from-outcome>valeurOutcome</from-outcome>
        		<to-view-id>/vue2.jsp</to-view-id>
        	</navigation-case>
        </navigation-rule>

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Il me semble que ce que vous décrivez n'est pas obligatoire dans JSF2?
    Parce que jusqu'à présent je me contente toujours de retourner le nom de la page - en l'occurrence, ici, listIncidentVue - et ça fonctionne toujours très bien ...

    Le soucis c'est que sans définir de navigation rule, pour un commandButton ça marche très bien ! C'est juste le commandLink qui déconne ...

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Problème résolu, en fait il n'y a pas d'erreur dans ce que je faisais mais un filtre interne à l'archetype que j'ai utilisé à la création du projet bloquait certaines urls de JSF apparemment ... tout fonctionne désormais

    Merci quand même pour ta réponse Mathieu.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2007
    Messages : 59
    Points : 69
    Points
    69
    Par défaut Solution trouvée pour résoudre le problème -- Besoin de détails
    Bonjour,

    je rencontre un problème semblable à celui de l'intervenant 'choux92':

    Description du problème:
    Dans une page xhtml, j'ai un bouton, qui effectue un appel à une méthode de bean. Or, cet appel ne s'exécute jamais.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        <h:panelGrid id="compteDeconnecterPanelGrid" columns="2" cellpadding="5" border="1" style="font-size:small;color:brown;background-color:blanchedalmond">
            <h:outputLabel for="compteDeconnecterIdentifiant" value="Identifiant :" />
            <h:outputText value="#{employeManagedBean.employe.identifiant}" id="compteDeconnecterIdentifiant"/>
            <f:facet name="footer">
                <f:ajax render="comptePanelGridForm">
                    <p:commandButton id="compteDeconnecterButton" value="Se déconnecter" update=":comptePanelGridForm" actionListener="#{employeManagedBean.doEmployeDeconnecter}"/>
                </f:ajax>
            </f:facet>
        </h:panelGrid>

    Or, l'appel à cette méthode ne s'exécute pas.

    Je voudrais bien avoir les détails de ta solution, choux92. Tu parles de configuration du projet lors de sa création. -->Cela m'intéresse.

    A tous ceux qui peuvent m'aider, merci d'avance et bon courage !

    chat_roux

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2007
    Messages : 59
    Points : 69
    Points
    69
    Par défaut Dans une page XHTML -- Appel à la méthode d'un bean -- Solution
    Bonjour,

    concernant ce problème, j'ai trouvé une solution !

    Description du problème:

    Ma page 'comptePanelGrid.xhtml', effectue 4 inclusions de pages (ci-dessous) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        <h:form id="comptePanelGridForm">
            <h:panelGrid columns="1" cellpadding="5" border="1">
                <h:panelGroup id="eastNorthPanel" rendered="#{employeManagedBean.compartmentEastNorth=='./employe/compteAccederForm.xhtml'}"><ui:include src="./employe/compteAccederForm.xhtml"/></h:panelGroup>
                <h:panelGroup id="eastCenter1Panel" rendered="#{employeManagedBean.compartmentEastCenter1=='./employe/compteIdentifierForm.xhtml'}"><ui:include src="./employe/compteIdentifierForm.xhtml"/></h:panelGroup>
                <h:panelGroup id="eastCenter2Panel" rendered="#{employeManagedBean.compartmentEastCenter2=='./employe/compteInscrireForm.xhtml'}"><ui:include src="./employe/compteInscrireForm.xhtml"/></h:panelGroup>
                <h:panelGroup id="eastSouthPanel" rendered="#{employeManagedBean.compartmentEastSouth=='./employe/compteDeconnecterForm.xhtml'}"><ui:include src="./employe/compteDeconnecterForm.xhtml"/></h:panelGroup>
            </h:panelGrid>
        </h:form>
    Et mon fichier 'compteDeconnecterForm.xhtml' affiche un bouton, qui appelle une méthode d'un bean (ci-dessous) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        <h:panelGrid id="compteDeconnecterPanelGrid" columns="2" cellpadding="5" border="1" style="font-size:small;color:brown;background-color:blanchedalmond">
            <h:outputLabel for="compteDeconnecterIdentifiant" value="Identifiant :" />
            <h:outputText value="#{employeManagedBean.employe.identifiant}" id="compteDeconnecterIdentifiant"/>
            <f:facet name="footer">
                <f:ajax render="comptePanelGridForm">
                    <p:commandButton id="compteDeconnecterButton" value="Se déconnecter" update=":comptePanelGridForm" action="#{employeManagedBean.doEmployeDeconnecter}"/>
                </f:ajax>
            </f:facet>
        </h:panelGrid>
    Lors de l'exécution : l'appel à cette méthode de bean ne s'exécutait pas !

    La solution au problème:
    -->J'ai rajouté 'JSF 2.1' dans les bibliothèques de mon projet.
    -->Jusque-là, 'JSF 2.1' était présent dans les frameworks du projet uniquement.

    Voilà. bon courage à tous ceux qui ont rencontré ce problème...
    chat_roux

  7. #7
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    Salut, juste un détail, ton f:ajax est inutile.

    Ce code là est suffisant avec un "actionListener" à la place d'une "action" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <h:panelGrid id="compteDeconnecterPanelGrid" columns="2" cellpadding="5" border="1" style="font-size:small;color:brown;background-color:blanchedalmond">         
    <h:outputLabel for="compteDeconnecterIdentifiant" value="Identifiant :" />
    <h:outputText value="#{employeManagedBean.employe.identifiant}" id="compteDeconnecterIdentifiant"/>         
    <f:facet name="footer">
    <p:commandButton id="compteDeconnecterButton" value="Se déconnecter" update=":comptePanelGridForm" actionListener="#{employeManagedBean.doEmployeDeconnecter}"/> 
    </f:facet>
    </h:panelGrid>
    mais la signature de "doEmployeDeconnecter" doit être "public void
    doEmployeDeconnecter()"

    L'attribut "action" est vraiment là pour spécifier une nouvelle cible de navigation. Or tu cherches à faire de l'AJAX, donc à rester sur la page, il vaut mieux donc privilégier des actionListener

    et enfin une très grande partie des tags de primesfaces sont "ajax" par défaut, dont le p:commandButton. Donc pas besoin de faire de "f:ajax".
    Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ...

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2007
    Messages : 59
    Points : 69
    Points
    69
    Par défaut Bien enregistré ton explication, merci.
    OK, bien enregistré ton explication, merci.

    En particulier, cette différence entre ''action'' et ''actionListener'' : je l'ignorais. (J'avais lu la javadoc de chacun de ces 2 éléments, sans la comprendre.)

    Et le fait que l'élément "p:commandButton" est en "ajax" par défaut : je l'ignorais également. (je débute sur primefaces...)

    Merci et bon courage !

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

Discussions similaires

  1. function javascript qui ne fonctionne pas dans la balise <body>
    Par typikal dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/04/2008, 16h45
  2. balise script : javascript ne fonctionne pas
    Par Darkroro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/01/2008, 10h43
  3. t:commandLink de tomahawk ne fonctionne pas
    Par cooltype dans le forum JSF
    Réponses: 5
    Dernier message: 26/05/2007, 17h55
  4. CommandLink ne fonctionne pas
    Par dev7 dans le forum JSF
    Réponses: 3
    Dernier message: 22/01/2007, 18h14

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