JSF ajax commandbutton not updating primefaces picklist

11,799

The PrimeFaces <p:commandButton> component doesn't work together with <f:ajax>. You need to use the button's own ajax-targeted attributes instead. Instead of the <f:ajax execute> you should use <p:commandButton process>. But this already defaults to @form, so you can omit it. Instead of the <f:ajax render> you should use <p:commandButton update>. Specifying client IDs which are already covered by @form is unnecessary, so just @form is sufficient. Also the ajax="true" attribute is unnecessary as that's the default already.

So just this should do:

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

Unrelated to the concrete problem, you're doing the business job inside a getter method. This is a bad idea. Do it in the button's action method instead. You also seem to be using a session scoped bean for view scoped data. This is a bad idea. Put the bean in the view scope instead.

Share:
11,799
BigJ
Author by

BigJ

Updated on June 05, 2022

Comments

  • BigJ
    BigJ almost 2 years

    This is the 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>
    

    When the commandbutton is clicked, the getDualListModelForTags() in the backing bean is called and executed. In getDualListModelForTags() I make some modifications so I want the picklist to be updated. But the picklist(id=tags) is not rendered again. Only when I refresh the page, are the modifications made to the picklist.