JSF, ajax bouton de commande pas la mise à jour de primefaces liste de choix
C'est le code:
<h:form id="articleForm" >
<p:commandButton value="Select tags" ajax="true" >
<f:ajax execute="@form" render="@form :articleForm:tags" />
</p:commandButton>
<p:pickList id="tags" value="#{articleController.dualListModelForTags}" var="tag" itemLabel="#{tag.tag}" itemValue="#{tag}" converter="distinctTagConverter">
<f:facet name="sourceCaption">Distinct tags</f:facet>
<f:facet name="targetCaption">Connected tags</f:facet>
</p:pickList>
</h:form>
Lorsque le bouton est cliqué, la getDualListModelForTags() dans le backing bean est appelé et exécuté. Dans getDualListModelForTags() j'ai du faire quelques modifications, donc je veux que la liste de choix pour être mis à jour. Mais la liste de choix(id=tags) n'est pas rendue de nouveau. Seulement lorsque j'actualise la page, sont les modifications apportées à la liste de choix.
OriginalL'auteur BigJ | 2012-01-18
Vous devez vous connecter pour publier un commentaire.
La PrimeFaces
<p:commandButton>
composant ne fonctionne pas avec<f:ajax>
. Vous devez utiliser le bouton propres ajax ciblées attributs de la place. Au lieu de la<f:ajax execute>
vous devez utiliser<p:commandButton process>
. Mais ce déjà par défaut@form
, de sorte que vous pouvez l'omettre. Au lieu de la<f:ajax render>
vous devez utiliser<p:commandButton update>
. Spécification client Id qui sont déjà couverts par@form
est inutile, il suffit donc de@form
est suffisant. Aussi laajax="true"
attribut est inutile, car c'est celui utilisé par défaut.Alors juste ce devrait le faire:
Sans rapport avec au problème concret, vous êtes en train de faire le travail des affaires à l'intérieur d'une méthode de lecture. C'est une mauvaise idée. Le faire dans le bouton
action
méthode à la place. Vous semblez aussi à l'aide d'une session d'étendue de haricot pour afficher l'étendue des données. C'est une mauvaise idée. Mettre les haricots dans l'étendue de l'affichage à la place.Parce que vous avez affaire avec vue sur l'étendue des données, et non pas avec de la session de l'étendue des données. Si vous traiter de vue de l'étendue des données que la session de l'étendue des données, puis la endser peut voir inconsitenties chaque fois que l'utilisateur final a la même page (vue) ouvrir de multiples fenêtres/onglets dans la même session du navigateur et bascule après chaque interaction.
OriginalL'auteur BalusC