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] Support ne recharge pas ma datatable.


Sujet :

JSF Java

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Points : 183
    Points
    183
    Par défaut [a4j] Support ne recharge pas ma datatable.
    Bonjour,

    en cette fin de semaine un petit problème vient me gacher mon futur weekend

    Sur une des pages de mon application une liste de sélection est dotée d'un a4j:support afin de faire apparaitre ou non un bouton de commande en fonction du contenu de cette liste.

    Problème ce support est censé recharger la datatable dans laquel il se trouve mais rien ne se passe... Il me semble pourtant n'avoir rien oublié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       <h:selectOneMenu id="somTeleTransmissionHMT" value="#{specTiers.teletransmission}" rendered="#{!partenaireBackBean.currentSpecifiqueTiersCommune.forOrganismePrevadies}">
                    <a4j:support event="onchange"reRender="dataTable_1" ajaxSingle="true"/>
                    <f:converter converterId="TeletransmissionConverterHMT" />
                    <t:selectItems value="#{partenaireBackBean.teletransmissionList}" var="teletrans"
                                   itemLabel="#{teletrans.libelle}"
                                   itemValue="#{teletrans}"/>
                </h:selectOneMenu>
    Le tout contenue bien évidement dans la t:dataTable datatable_1 ... Et impossible de faire recharger cette fameuse dataTable...

    Plus étrange j'ai dans un autre endroit de la page exactement le même code (selectOneMenu avec un a4j:support) à la seul différence que le support embarque aussi un action listener et que la liste est dans un h:panelgrid et non dans une t:datatable...

    Voila, donc problème assez peu clair pour moi, si quelqu'un pouvait m'éclairer de sa lanterne justement...

    et bon weekend a tous!!

    Donc

  2. #2
    Membre régulier Avatar de mr1azl
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 77
    Points : 107
    Points
    107
    Par défaut
    ta dataTable est bien contenue dans une form?
    essaye de mettre la dataTable dans un <a4j:outputPanel et met le reRender sur ce outputPanel
    I code

  3. #3
    Membre confirmé Avatar de Lordsephiroth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 199
    Points : 494
    Points
    494
    Par défaut
    Bonjour,

    Je te conseille d'ajouter ce code tout en bas de ta page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a4j:log level="DEBUG" popup="false" width="400" height="200"/>
    Tu devrais voir apparaître des informations de debug par rapport aux appels AJAX. C'est très pratique. Tu devrais notamment pouvoir décrypter si le problème vient de l'ID de ta table qui est pas trouvé, de la réponse AJAX qui ne contient pas d'informations de remplacement, ...

    Après, c'est pas toujours limpides comme messages, si tu ne les comprends pas tu peux toujours essayer de les poster ici. Ca m'a bien aidé personnellement.
    Always code as if the guy maintaining your application is a violent psychopath!
    Site personnel sur la saga Final Fantasy : http://www.final-fantasy.ch

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Points : 183
    Points
    183
    Par défaut
    De retour du weekend

    Alors merci pour vos indications tout d'abord. Donc la datatable est bien dans un form, et j’obtiens le même résultat (ou absence de résultat plutôt) avec un a4j:outputPanel...

    Et merci sephiroth pour la ligne de debug ajax, cela va m’être très pratique!!!

    Par contre comme tu me l'a dit les messages d'erreurs sont pour le moins... obscurs :

    error[10:25:37,036]: Error parsing XML
    error[10:25:37,036]: Parse Error: XML Parsing Error: Nom commencé avec un caractère non valide.
    Location: Line Number 54, Column 36:
    if((typeof target!='undefined') && target != null)
    ------------------------------------^
    debug[10:25:37,036]: call selectSingleNode for id= org.ajax4jsf.oncomplete

    Alors j'ai fait un petit tour sur le code source de ma page apparemment la fonction incriminée serait celle-ci :

    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
    function oamSubmitForm(formName, linkId, target, params)
    	{
     
    		var clearFn = 'clearFormHiddenParams_'+formName.replace(/-/g, '\$:').replace(/:/g,'_');
    		if(typeof eval('window.'+clearFn)!='undefined')
    		{
    			eval('window.'+clearFn+'(formName)');
    		}
     
    		if(typeof window.getScrolling!='undefined')
    		{
    			oamSetHiddenInput(formName,'autoScroll',getScrolling());
    		}
     
    		var oldTarget = '';
    		if((typeof target!='undefined') && target != null)
    		{
    			oldTarget=document.forms[formName].target;
    			document.forms[formName].target=target;
    		}
    		if((typeof params!='undefined') && params != null)
    		{
    			for(var i=0; i<params.length; i++)
    			{
    				oamSetHiddenInput(formName,params[i][0], params[i][1]);
    			}
     
    		}
     
    		oamSetHiddenInput(formName,formName +':'+'_idcl',linkId);
     
    		if(document.forms[formName].onsubmit)
    		{
    			var result=document.forms[formName].onsubmit();
    			if((typeof result=='undefined')||result)
    			{
    				document.forms[formName].submit();
    			}
     
    		}
    		else 
    		{
    			document.forms[formName].submit();
    		}
    		if(oldTarget==null) oldTarget='';
    		document.forms[formName].target=oldTarget;
    		if((typeof params!='undefined') && params != null)
    		{
    			for(var i=0; i<params.length; i++)
    			{
    				oamClearHiddenInput(formName,params[i][0], params[i][1]);
    			}
     
    		}
     
    		oamClearHiddenInput(formName,formName +':'+'_idcl',linkId);return false;
    	}
    Mais le problème doit plutôt venir de ce que la fonction prend en paramètres étant donné qu'il s'agit de code js généré tout seul...

    Si quelqu'un à une explication je suis preneur. N'hésitez pas a demander pour plus de précision bien sur ;-)

  5. #5
    Membre confirmé Avatar de Lordsephiroth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 199
    Points : 494
    Points
    494
    Par défaut
    Visiblement c'est la réponse XML générée par JSF lors de la requête AJAX qui n'est pas correctement interprétée.

    En se basant sur le fait qu'il y a peu de chance pour que JSF génère lui-même une document invalide, il doit y avoir une information contenue dans ta table qui rend la réponse invalide.

    Un truc que tu peux toujours tester si tu es sur Firefox.
    Dans le log en mode debug, tu devrais voir un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug[11:25:25,697]: Full response content: <?xml version="1.0"?> <html xmlns="http://www.w3.org/1999/xhtml"><head><title></title><link class="component" h ................
    Si tu sélectionnes la réponse XML à partir de la première balise <?xml version="1.0"?>, que tu fais un clic droit puis "View selection source" ou l'équivalent français, tu auras le même texte en conservant les retours à la ligne. Essaie de te placer à la ligne 54, colonne 36, et de voir ce qu'il y a. Si tu reconnais un texte qui sort de ta base de données, c'est qu'il y a un problème avec ça.

    Tu tomberas peut être sur un morceau de code qui ne t'aide pas du tout à trouver le problème, soit parce que la ligne 54 n'est pas réellement la ligne 54, soit parce que le problème est tout autre.

    Autre chose que tu peux tester : vider ta base de données pour que la table rafraichie soit vide. Si ça fonctionne, ajoute une ligne, puis 2, puis x jusqu'à trouver celle qui pose problème. Si le rafraîchissement de la table même vide ne fonctionne pas, c'est qu'il te faut chercher ailleurs que dans le contenu. Et dans ce cas j'ai plus d'idées pour le moment
    Always code as if the guy maintaining your application is a violent psychopath!
    Site personnel sur la saga Final Fantasy : http://www.final-fantasy.ch

  6. #6
    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 : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

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

    J'ai pas trop tout lu, donc désolé si je poste hors-sujet, mais l'erreur rencontré, je la connais. Il s'agit d'un problème lié au fait que dans la réponse Ajax, il y a du code JavaScript (utilisé par les <h:commandButton/>). Il faut forcer JSF à utiliser un fichier externe .js au lieu de mettre le code JS inline dans les pages JSF.

    Pour ce faire, il faut ajouter dans le web.xml, ceci :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        <context-param>
            <param-name>com.sun.faces.externalizeJavaScript</param-name>
            <param-value>true</param-value>
        </context-param>

    Voir ici pour plus d'informations.
    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

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Points : 183
    Points
    183
    Par défaut
    Bonjour!!!

    Alors merci de vos réponses, romainTaz j'ai presque eu un sursaut d'espoir en voyant ta réponse malheureusement la fonction d'externalisation du javaScript est proposé à partir de la version 1.2 de jsf hors j'utilise la version 1.1 (à la pointe de la technologie!!) et un passage en 1.2 n'est pour l'instant pas à l'ordre du jour (on vient de se rendre compatible pour ie7 alors on ne va pas mettre la charrue avant les boeufs ). Je suis en train de chercher si il existe un moyen de faire ça en 1.1 on va voir ce que ça donne.

    Sinon grâce aux indications de sephiroth la ligne coupable est celle ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var oldTarget = '';
    		if((typeof target!='undefined') &amp;&amp; target != null)
    Ce qui ne me parle pas des masses je doit dire ^^ Surtout qu'après les éclairages de romainTaz il existe a priori une solution au problème (reste juste à l'adapter a jsf 1.1 ^^). Je vais donc investiguer de ce coté...

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Points : 183
    Points
    183
    Par défaut
    Après quelques recherches je suis tombé sur ce post ou romainTaz (encore lui ^^) conseil de se passer du parser xml NEKO. C'est ce que j'ai fait du coup la dataTable se met bien a jours par contre elle revient à sa valeur d'origine et j'ai un nouveau message d'erreur dans les logs a4j :

    debug[17:03:08,529]: Replace content of node by outerHTML()
    error[17:03:08,529]: Error to clear node content by innerHTML Erreur d'exécution inconnue
    debug[17:03:08,544]: search for elements by name 'script' in element table
    debug[17:03:08,544]: selectNodes found 1
    debug[17:03:08,544]: Scripts in updated part count : 1
    debug[17:03:08,544]: Update part of page for Id: partenaireEditForm:frmEditGlobal:partenaireEditSpecifiqueForm:blocSpecifiqueCommuneMutuelle:dataTable1 successful
    debug[17:03:08,544]: call selectSingleNode for id= ajax-view-state
    debug[17:03:08,544]: Hidden JSF state fields:
    debug[17:03:08,544]: Namespace for hidden view-state input fields is undefined
    debug[17:03:08,544]: search for elements by name 'input' in element span
    debug[17:03:08,544]: selectNodes found 0
    debug[17:03:08,560]: Replace value for inputs: 97 by new values: 0
    debug[17:03:08,560]: search for elements by name 'INPUT' in element span
    debug[17:03:08,560]: selectNodes found 0
    debug[17:03:08,560]: Replace value for inputs: 97 by new values: 0
    debug[17:03:08,560]: call selectSingleNode for id= _A4J.AJAX.focus
    debug[17:03:08,560]: No focus information in response
    debug[17:03:08,560]: call selectSingleNode for id= org.ajax4jsf.oncomplete
    debug[17:03:08,654]: Evaluate script replaced area in document:
    error[17:03:08,669]: . Error message: Invalid argument.
    On avance, on avance un nouveau message d'erreur est toujours un pas en avant dans la résolution d'un problème!!!!

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Points : 183
    Points
    183
    Par défaut
    Hello!!

    Bon en fait solution trouvé :

    Je me passe carrément du a4j:support et j'ajoute un onchange="submit()" dans mon selectOneMenu ça me recharge toute la page mais au moins ça marche...

    De toute façons je devrais dans un avenir plus ou moins proche (selon le bon vouloir de mon dsi ^^) enlever toutes les utilisations de richeFaces et a4j donc ça m'avance un peu dans mon travail ^^

    Merci a tous de votre aide et de la célérité de vos réponse en tout cas ;-)

    ps : Si tout de même quelqu'un à une solution autre à mon problèmes ça m’intéresse ne serait-ce qu'a titre de culture personnel ;-) ->mp!!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/07/2009, 11h57
  2. Problème avec <a4j:support/>
    Par romaintaz dans le forum JSF
    Réponses: 2
    Dernier message: 17/10/2007, 17h12
  3. [VBA-E] Fonction qui ne se recharge pas
    Par iupien78 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/01/2007, 21h23
  4. [AJAX] la page ne se recharge pas
    Par duplo dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/07/2006, 09h50

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