【问题标题】:<p:growl> and <p:messages> in a same page<p:growl> 和 <p:messages> 在同一页面中
【发布时间】:2012-01-27 20:21:31
【问题描述】:

我想用&lt;p:messages&gt;显示错误信息,用&lt;p:growl&gt;显示成功信息。 在后台 bean 中:

FacesContext context = FacesContext.getCurrentInstance(); 
context.addMessage(null, new FacesMessage(title, msg));

但我发现无论我在支持 bean 中添加什么消息,&lt;p:messages&gt;&lt;p:growl&gt; 都显示它。

任何建议。

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

    growl's demo page of PrimeFaces 中,他们提到:“Growl 只是替换了 h:messages 组件。”。恐怕您可能无法实现目标,因为咆哮还会在视图中显示所有 FacesMessage。

    但是,如果您颠倒您的要求 - 使用 &lt;p:growl&gt; 显示错误并使用 &lt;p:message&gt; 显示成功消息,您实际上可以通过以下方式实现:

    <p:message id="successMsg" for="successMsg" />
    
    @ManagedBean
    @RequestScoped
    public class MrBean {
    
       public void doSomething() {
          FacesContext context = FacesContext.getCurrentInstance(); 
    
          if (failed) {
             context.addMessage(null, new FacesMessage("Failed", "Sry boss! I have failed.")); 
    
          } else {
             context.addMessage("successMsg", new FacesMessage("Successful", "Hey boss! I did it!"));
    
          }
       }
    
    }
    

    【讨论】:

    • 你的意思是addMessage可以特殊&lt;p:messages&gt;的id,但不适用于&lt;p:growl&gt;
    • 小心!我使用的是&lt;p:message&gt;,而不是&lt;p:messages&gt;
    【解决方案2】:

    JSF:

    <p:messages for="somekey" />
    <p:growl for="anotherkey" />
    

    豆子:

    context.addMessage("somekey", new FacesMessage(FacesMessage.SEVERITY_INFO,"Sample info message", "PrimeFaces Rocks"));
    context.addMessage("somekey", new FacesMessage(FacesMessage.SEVERITY_INFO,"Sample info message", "Always bet on Prime"));a
    context.addMessage("anotherkey", new FacesMessage(FacesMessage.SEVERITY_INFO,"Sample info message", "PrimeFaces is developed by Chuck Norris"));
    

    这对我来说很好用!

    【讨论】:

      【解决方案3】:

      从 PrimeFaces 3.3 开始,你可以做你想做的事了:

      http://blog.primefaces.org/?p=1894

      您现在可以这样做:

      <p:messages severity="error" />
      <p:growl severity="info, warn" />
      

      context.addMessage("somekey", new FacesMessage(FacesMessage.SEVERITY_ERROR,"Error Title", "Error Message"));
      context.addMessage("somekey", new FacesMessage(FacesMessage.SEVERITY_INFO,"Success Title", "Success Message"));
      

      【讨论】:

        【解决方案4】:

        这可能是一个老问题,但也许这仍然相关:

        我遇到了同样的情况,我在每个标签中使用for 语句解决了这个问题

        <p:growl id="someid" for="growl" />
        <p:messages id="messageid" for="messages" />
        

        和支持 bean:

        context.addMessage("growl", new FacesMessage("Successful", "to growl"));
        context.addMessage("messages", new FacesMessage("Successful", "to messages"));
        

        顺便说一句,如果您添加 autoupdate="true",那么咆哮和消息都会重置消息(如果您将消息添加到咆哮,消息将被清除)

        【讨论】:

          【解决方案5】:

          您可以使用仅在验证错误时不呈现的 p:growl。

          <p:growl 
              id="growl" 
              sticky="true" 
              showDetail="true" 
              rendered="#{not facesContext.validationFailed}"/>
          

          【讨论】:

            【解决方案6】:

            我为咆哮和消息添加了一个单独的消息面板,并在我提交以下表单时更新此面板:

             <p:panel id="messages">
                <p:messages for="errorMsg" showDetail="true" />
                <p:growl for="infoMsg" showDetail="true" />
                <p:growl globalOnly="true" />
             </p:panel>
            
            <p:commandButton id="submit" value="Submit" update="messages" actionListener="#{yourManagedBean.submit}" />
            

            在 ManagedBean 中

                 // display submit info - showDetail="true" in infoMsg will show details message
                 FacesMessage infoMsg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Submit Info", "Your details info message." );
                 FacesContext.getCurrentInstance().addMessage("infoMsg", infoMsg);
            
                 // display error message - e is instance of Exception
                 FacesMessage errMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error Occured", e.getMessage());
                 FacesContext.getCurrentInstance().addMessage("errorMsg", errMsg);
            
            
                 // display some generic message (with no details in growl)
                 FacesMessage genericMsg = new FacesMessage("Generic Message");
                 FacesContext.getCurrentInstance().addMessage(null, genericMsg);
            

            我已经使用 Primefaces 5.0 对此进行了测试。

            享受吧!

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-05-24
              • 1970-01-01
              • 2014-10-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-10-01
              相关资源
              最近更新 更多