2016-08-11 1 views
0

J'utilise JSF 1.2 avec RichFaces 3.3.3 (grand projet d'entreprise - pas d'options pour mettre à jour encore) et j'ai un problème avec la redirection de certains champs avec <a4j:support> tag. J'ai une table, et une ligne récapitulative, qui affiche les valeurs calculées dans le bean backing. Les cellules de la ligne récapitulative doivent être mises à jour automatiquement après chaque modification des autres lignes, donc sur chaque cellule qui déclenche une mise à jour, j'ai un valueChangeListener qui appelle la méthode "recalcul" sur le bean et un <a4j:support reRender="[corresponding_summary_cell]" (...) /> Le problème est quand je charge le page avec une table la redirection ne fonctionne pas. La requête Ajax est appelée, mais renvoie une sorte de réponse "vide". Ce n'est que lorsque je recharge la vue (en cliquant sur un lien vers la page par exemple) que les requêtes commencent à fonctionner comme prévu, à mettre à jour correctement les cellules récapitulatives correspondantes.RichFaces <a4j:support> ne rerender au premier essai

Le type-of-vide fragment de contenu de réponse:

<body> 
    <meta name="Ajax-Update-Ids" content="" /><span id="ajax-view-state">  
    <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id11" autocomplete="off" /></span> 
    <meta id="Ajax-Response" name="Ajax-Response" content="true" /> 
    <meta name="Ajax-Update-Ids" content="" /> 
    <span id="ajax-view-state"> 
    <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id11" autocomplete="off" /> 
    </span> 
    <meta id="Ajax-Response" name="Ajax-Response" content="true" /> 
</body> 

La cellule qui déclenche un exemple de calcul:

<customNamespace:moneyValue value="#{someAttribute}" id="field1" valueChangeListener="#{controller.calculateSums}"> 
    <a4j:support event="onchange" reRender="Form-Table-Cost1Sum"/> 
</customNamespace:moneyValue> 

Les lignes de la table sont ajoutées dybnamically, mais c'est seulement la première fois (ajouté la première rangée à une table vide) qui donne le problème, les lignes suivantes fonctionnent bien. J'ai aussi essayé de rendre toute la forme - rien n'a changé.

TL; DR: Vous avez une cellule de table qui devrait ajax-mise à jour d'une autre ligne, fonctionne seulement après rechargement, la première fois donne une réponse comme attribut rerender était vide.

Répondre

0

Essayez d'ajouter une instance de votre composant au-dessus de la table, avec l'attribut rendered="false". Ceci s'assurera que JSF a chargé tout ce qui est nécessaire pour traiter les étiquettes.