update rendered primeface form event component ajax jsf primefaces render

ajax - rendered - update parent primefaces



JSF ajax commandbutton no está actualizando primefaces picklist (1)

Este es el código:

<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>

Cuando se hace clic en el botón de comando, se llama y se ejecuta getDualListModelForTags () en el bean de respaldo. En getDualListModelForTags () hago algunas modificaciones, así que quiero que la lista de selección se actualice. Pero la lista de selección (id = tags) no se procesa nuevamente. Solo cuando actualizo la página, las modificaciones se realizan en la lista de selección.


El componente PrimeFaces <p:commandButton> no funciona junto con <f:ajax> . En su lugar, debe usar los atributos propios del Ajax del botón. En lugar de <f:ajax execute> debe usar <p:commandButton process> . Pero esto ya está predeterminado en @form , por lo que puede omitirlo. En lugar del <f:ajax render> debe usar <p:commandButton update> . La especificación de las ID de cliente que ya están cubiertas por @form es innecesaria, por lo que solo @form es suficiente. Además, el atributo ajax="true" es innecesario ya que ese es el predeterminado.

Entonces, esto debería hacer:

<p:commandButton value="Select tags" update="@form" />

Sin relación con el problema concreto, estás haciendo el trabajo de negocios dentro de un método getter. Esta es una mala idea. Hágalo en el método de action del botón en su lugar. También parece estar usando un bean con ámbito de sesión para ver los datos del ámbito. Esta es una mala idea. Ponga el bean en el alcance de la vista en su lugar.