Mon but est de charger dynamiquement le contenu d'un composant JSF 2.0. Le cas d'utilisation est le suivant: l'utilisateur clique sur un bouton, ce qui ouvre un panneau modal avec des contenus lourds via AJAX. En raison de sa lourdeur, je veux retarder le chargement jusqu'à ce que l'utilisateur en ait vraiment besoin. Si l'utilisateur ferme ce panneau, il n'est pas réellement supprimé de DOM, mais simplement effacé. Si l'utilisateur clique à nouveau sur le bouton d'initialisation, le panneau précédemment chargé s'affiche.JSF 2.0: Retard rendu contenu du composant (composite) jusqu'à un nouveau rendu appel AJAX il
Je sais que je peux empêcher le rendu de contenu en utilisant rendered="#{cc.attrs.visibilityState == 'hidden'}"
et que je peux re-rendre le composant via l'appel JSF AJAX. Cependant, comment puis-je ajuster les attributs d'un composant composite à la volée de sorte que la deuxième fois autour du composant rende réellement?
1) Je sais que je pouvais faire:
<h:outputLink>Foo
<f:ajax event="click" render="theComponentIWantToUpdate" listener="#{someBean.someMethod()}" />
</h:outputLink>
Et puis réglez les attributs theComponentIWantToUpdate
programme (pour changer la valeur de #{cc.attrs.visibilityState}
) de sorte qu'il serait effectivement rendu avec le contenu complet. Mais comment faire cela?
2) Aussi, le problème est que je ne veux pas mettre à jour theComponentIWantToUpdate
chaque fois que j'appuie sur le bouton, seulement la première fois (voir l'analyse de rentabilisation). Comment puis-je définir une évaluation pour <f:ajax />
appel pour cela? Il a l'attribut disabled
, mais il ne commande que le rendu du gestionnaire AJAX (non évalué chaque fois que le lien est appuyé).
3) De plus, je souhaite d'abord faire du javascript personnalisé lorsque le lien est cliqué et exécuter uniquement la requête AJAX via javascript en utilisant jsf.ajax.request()
. Cependant, cette fonction ne prend pas en charge la fourniture listener
attribut donc je ne veux pas comment exécuter une méthode de backing bean avec javascript brut jsf.ajax.request()
appel? Il existe en fait une question similaire sans réponses appropriées (voir JSF 2.0 AJAX: jsf.ajax.request to call method not only rerender an area of page).
Ok je choisir ma propre solution partielle acceptée un pour le moment. Si quelqu'un a de meilleures suggestions, je serai heureux de changer cette sélection :) –