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 :

<a4j:commandLink> est inactif


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Par défaut <a4j:commandLink> est inactif
    Bonjour,

    Pour expliciter un peu le titre du sujet j'ai sur une page une rich:datatable contenant entre autres un a4j:commandLink :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <a4j:commandLink actionListener="#{infoBancaireBackBean.checkDestinatairePaiement}"
              rendered="#{ligne.rowCreating && !infoBancaireBackBean.destPSaisi}"
              reRender="dataTable_InfosBancaires" > <!-- bypassUpdates="true" immediate="true" -->
              <h:outputText value="#{applicationProperties['bouton.verifier']}" /> 
     
    </a4j:commandLink>
    Le problème c'est que ce commandLink ne fait rien lorsque je clique dessus... j'ai testé en mode debug il n'appel pas la méthode listé par l'actionListener (et l'EL est bonne) et même avec la ligne de log ajax :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a4j:log level="DEBUG" popup="false" width="400" height="200"/>
    Je ne voit aucune erreur... il ne se passe juste rien... enfin pas tout a fait car d'après les logs ajax une requête est bien lancée mais elle ne parvient pas jusqu'a mon serveur... Je suis bloqué quoi...

    Si quelqu'un à une petite idée de l'origine du problème, pour info je suis en jsf 1.1

    Merci d'avance!!

    Cordialement

    Mcfly

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Par défaut
    Bonjour,

    Bon un pti up accompagné de nouvelles :

    Alors pour commencer j'ai décider de me débarrasser de a4j qui ne m'apporte pas grand chose (dans cette page pour le moins) et donc de remplacer le a4j:commandLink par un t:commandLink... Résultat aucun changement bien sur ^^

    Du coup après de longue et éreintantes investigations il apparait que c'est un rich:suggestionBox qui provoque ce bug, en effet quand je le met en commentaires je n’ai plus aucun problème . Malheureusement je ne peut pas me passer de celui ci, donc le retirer de la page n'est pas une option...

    Voila le code du coupable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <%--  		            <rich:suggestionbox for="iptDestinatairePaiement"
    		                                suggestionAction="#{partenaireBackBean.partenaireAutoComplete}"
    		                                var="destP" fetchValue="#{destP.cleCommune}"
    		                                minChars="4" ajaxSingle="true" eventsQueue="qdpCodePartenaire"
    		                                height="150" width="300" cellpadding="1" cellspacing="0"
    		                                nothingLabel="#{applicationProperties['message.autocomplete.no.result']}"
    		                                ignoreDupResponses="true">
    		                <h:column>
    		                    <h:outputText value="#{destP.cleCommune}"/>
    		                </h:column>
    		                <h:column>
    		                    <h:outputText value="#{destP.nomPrenomOrRaisonSociale}"/>
    		                </h:column>
    		            </rich:suggestionbox> --%>
    Et quelques précisions sur cette datable, elle utilise une classe générique de bean décoré pour être alimenté :

    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
    public class GenericBeanDecorator<T> implements Serializable {
     
    	private static final long serialVersionUID = -6725496137615210649L;
     
        /** la ligne est elle en édition ?. */
        private boolean isRowEditing;
    	/** la ligne est elle en création?. */
    	private boolean isRowCreating;
        /** objet cible. */
    	private T cible;
        /** sauvegarde de l'obet cible. */
    	private T originalValue;
        /** id de la ligne correspondant dans un tableau. */
        private int rowIndex;
        /** la ligne est elle modifiable ?. */
        private boolean editable;
        /** la ligne est elle supprimable ?. */
        private boolean deletable;
     
        /**
             * Transforme une liste de beans en liste de décorated beans
         * @param l liste d'origine
         * @param listDecorated liste d'arrivée
         */
    	public static <U> void getFromList(final List<U> l,
    			final List<GenericBeanDecorator<U>> listDecorated) {
    		for (U jBean : l) {
    			listDecorated.add(new GenericBeanDecorator<U>(jBean));
    		}
    	}
     
    	/***************************************************************************
             * Sauvegarde la variable en cours
         * (nécessite une classe avec un contructeur vide)
             */
    	@SuppressWarnings("unchecked")
    	public void saveCurrentValue() {
    		try {
     
    			if (originalValue == null) { // si la variable de back up est
    				// vide il faut l'instancer.
    				// Petit problème, on ne connait pas
    				// la type de la variable :)
    				Class uneClasse = cible.getClass();
    				try {
    					originalValue = (T) uneClasse.newInstance(); // Dangereux
    					// nécesite
    					// un
    					// contructeur
    					// vide
    					// !
     
    				} catch (InstantiationException e) {
    					throw new RuntimeException(e);
    				}
    			}
    			BeanUtils.copyProperties(originalValue, cible);
    		} catch (IllegalAccessException e) {
    			throw new RuntimeException(e);
    		} catch (InvocationTargetException e) {
    			throw new RuntimeException(e);
    		}
    	}
     
    	/***************************************************************************
             * Recharge l'ancienne version de la variable
         * @throws Exception exception
         */
    	public void restorePreviousValue() throws Exception {
    		if (originalValue != null) {
    			try {
    				BeanUtils.copyProperties(cible, originalValue);
    			} catch (IllegalAccessException e) {
    				throw new RuntimeException(e);
    			} catch (InvocationTargetException e) {
    				throw new RuntimeException(e);
    			}
    		} else {
    			throw new Exception("No saved value");
    		}
    	}
     
    	protected GenericBeanDecorator() {
    		super();
    	}
     
    	public GenericBeanDecorator(final T object) {
    		this();
    		setCible(object);
    	}
     
    	/**
             * @return the isRowEditing
             */
    	public boolean isRowEditing() {
    		return isRowEditing;
    	}
     
    	/**
             * @param isRowEditing
             *            the isRowEditing to set
             */
    	public void setRowEditing(final boolean isRowEditing) {
    		this.isRowEditing = isRowEditing;
    	}
     
    	/**
             * @return the cible
             */
    	public T getCible() {
    		return cible;
    	}
     
    	/**
             * @param cible
             *            the cible to set
             */
    	public void setCible(final T cible) {
    		this.cible = cible;
    	}
     
    	public boolean isRowCreating() {
    		return isRowCreating;
    	}
     
    	public void setRowCreating(boolean isRowCreating) {
    		this.isRowCreating = isRowCreating;
    	}
     
        public int getRowIndex() {
            return rowIndex;
        }
     
        public void setRowIndex(int rowIndex) {
            this.rowIndex = rowIndex;
        }
     
        public boolean isEditable() {
            return editable;
        }
     
        public void setEditable(boolean editable) {
            this.editable = editable;
        }
     
        public boolean isDeletable() {
            return deletable;
        }
     
        public void setDeletable(boolean deletable) {
            this.deletable = deletable;
        }
    }
    Je soupconne fortement mon utilisation de cette classe comme étant la coupable car j'ai eu quelques erreurs bizarres sur la fonction suivante :

    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
    	/** Binding component for the result table. */
    	private org.richfaces.component.html.HtmlDataTable dtInfosBancairesList;	
    public boolean isModeReglementSaisi() {
    		try{
    		if(dtInfosBancairesList.isRowAvailable()){
    				GenericBeanDecorator<InfoBanque> data = (GenericBeanDecorator<InfoBanque>) dtInfosBancairesList.getRowData();
    			if(data.getCible().getModeReglementPrest() != null){
    				return (!data.getCible().isReglementParCheque());
    			}
    			else return false;
    		}
    		return false;
    		}catch (Exception e){
    			System.out.println(e.getMessage() + e.getCause());
    			return false;
    		}
    	}
    Le getRowData qui est censé me retourner les données de la ligne courante de la datatable ne retournait rien lors de l'actualisation de la suggestion box justement, j'ai du rajouter un certain nombres de garde fous et un try catch pour avoir une vu sur les éventuelles erreurs générées mais dans le cas qui nous intéresse rien ne remonte...

    Voila pour ce complément, a vot bon coeur msieur dames!!

Discussions similaires

  1. gérer un post dans un a4j:commandLink
    Par sup dans le forum JSF
    Réponses: 4
    Dernier message: 25/09/2008, 08h50
  2. Passage de parametre sur a4j:commandLink
    Par yoskater dans le forum JSF
    Réponses: 4
    Dernier message: 04/03/2008, 11h03
  3. Le bouton exécuter(F9) est inactif
    Par OROS dans le forum Delphi
    Réponses: 9
    Dernier message: 01/07/2006, 18h11
  4. Réponses: 4
    Dernier message: 22/02/2006, 15h47

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