Search code examples
jsfjsf-2primefaces

How to call a method after clicking a fieldset in primefaces?


This is the code from my .xhtml file and I added under the fieldset

index.xhtml

    <p:fieldset legend="BPS Listener Method" toggleable="true" collapsed="#{bpsFrontBean.bpsListenerSwitch}" toggleSpeed="500" style="width: 920px;margin: 0 auto; text-align: left">
    <p:ajax listener="#{bpsFrontBean.onToggleBpsListenerSwitch}" update="parametersGrid"/>
    .........
    </p:fieldset>

if I run the code above before the page is shown, there is an error saying:

    javax.faces.view.facelets.TagException: <p:ajax> Event attribute could not be determined: null

I want to trigger a method if the toggleable fieldset was clicked.


Solution

  • Page 205-206 of Primefaces User Guide (http://www.primefaces.org/showcase/ui/panel/fieldset.xhtml) says:

    Ajax Behavior Events

    toggle is the default and only ajax behavior event provided by fieldset that is processed when the content is toggled. In case you have a listener defined, it will be invoked by passing an instance of org.primefaces.event.ToggleEvent.

    Here is an example that adds a facesmessage and updates growl component when fieldset is toggled.

    <p:growld id="messages" />
    <p:fieldset legend="Toggleable Fieldset" toggleable="true">
        <p:ajax listener="#{bean.onToggle}" update="messages"/>
        //content
    </p:fieldset>
    

    On the bean:

    public void onToggle(ToggleEvent event) {
       Visibility visibility = event.getVisibility();
       FacesMessage msg = new FacesMessage();
       msg.setSummary("Fieldset " + event.getId() + " toggled");
       msg.setDetail("Visibility: " + visibility);
       FacesContext.getCurrentInstance().addMessage(null, msg);
    }