1

I have a JSF page that contains a growl message with primefaces Wizard component. The Wizard contains a FlowListener attribute. On the Flowevent, the growl message should fire however it is not. The FlowListener is working because code not related to updating the growl message is being executed however the growl message is not being displayed. Any help in fixing this is appreciated.

Using: JSF Mojarra 2.2, Primefaces 4.0, Galssfish 4

My JSF code:

<h:form>    

    <p:growl id="growl" showDetail="true" />    

    <p:wizard flowListener="#{reviewBean.handleFlow}" >

        <p:tab id="Contact" title="Contact Details" >               
            <p:panel header="#{reviewBean.contactInstr}" >
                <p:messages />
                <h:panelGrid columns="2" >

                    <h:outputText value="Address: " />
                    <p:inputText  value="#{reviewBean.contactData.address1}" required="true" 
                                    requiredMessage="Address is required" size="50" />

                    <h:outputText value="Address: " />
                    <p:inputText  value="#{reviewBean.contactData.address2}" size="50" />

                    <h:outputText value="City: " />
                    <p:inputText  value="#{reviewBean.contactData.city}" required="true" 
                                    requiredMessage="City is required" size="50"/>

                    <h:outputText value="State: " />
                    <p:selectOneMenu value="#{reviewBean.contactData.state}" >              
                        <f:selectItems value="#{reviewBean.contactData.stateOptions}" />                                                    
                    </p:selectOneMenu>

                    <h:outputText value="Zip: " />
                    <p:inputText  value="#{reviewBean.contactData.zip}" required="true" 
                                        requiredMessage="Zip is required" size="50" />                      

                </h:panelGrid>
            </p:panel>              
        </p:tab>

        // Additional tabs omitted .........

    </p:wizard>
</h:form>

FlowListener from my Bean:

public String handleFlow(FlowEvent event) {

    String currentStepId = event.getOldStep();                              // get current tab
    String stepToGo = event.getNewStep();                                   // get next tab in Flow
    RequestContext request = RequestContext.getCurrentInstance();
    FacesContext context = FacesContext.getCurrentInstance();

    switch (currentStepId) {

        case "Contact": 

            // Save user entered contact information to database 
            datalist.saveContact(contactData, user.getId());            
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Data Saved",  "") );
            request.update("growl");
            break;

         // remaining cases omitted ........


    }

    return stepToGo;            // return next tab in Flow
}
Stevenyc091
  • 195
  • 1
  • 2
  • 22
  • Possible duplicate of [How to find out client ID of component for ajax update/render? Cannot find component with expression "foo" referenced from "bar"](https://stackoverflow.com/questions/8634156/how-to-find-out-client-id-of-component-for-ajax-update-render-cannot-find-compo) – Kukeltje Nov 11 '17 at 07:35

1 Answers1

2
request.update("growl");

This is the wrong part.

Put an id to your form, then reference it like

i.e

request.update("your_form_id:growl");

Alternatively you could activate the auto-update feature of the growl with the attribute autoUpdate="true" of the growl component, and remove the request.update() method call in your backing bean.

Kukeltje
  • 12,223
  • 4
  • 24
  • 47