<p:growl>未在<p:wizard> FlowListener </p:wizard> </p:growl>上执行

时间:2014-07-05 15:57:23

标签: jsf-2 primefaces

我有一个JSF页面,其中包含带有primefaces Wizard组件的growl消息。向导包含FlowListener属性。在Flowevent上,咆哮信息应该发射,但事实并非如此。 FlowListener正在运行,因为正在执行与更新growl消息无关的代码,但是没有显示growl消息。任何帮助解决这个问题都是值得赞赏的。

使用:JSF Mojarra 2.2,Primefaces 4.0,Galssfish 4

我的JSF代码:

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

来自我的Bean的FlowListener:

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
}

1 个答案:

答案 0 :(得分:2)

request.update("growl");

这是错误的部分。

为您的表单添加一个ID,然后像

一样引用它

request.update("your_form_id:growl");

或者,您可以使用growl组件的属性autoUpdate="true"激活growl的自动更新功能,并删除辅助bean中的request.update()方法调用。