如何防止p消息在更新全局PrimeFaces咆哮时被更新



我使用的是PF 5.3和JSF 2.2

我有一个全局p:咆哮,它将在backBean中更新,问题是每当我更新全局p:吼叫时,其他p:消息也会用相同的数据更新。我想要一种方法,只更新backbean中操作方法中的全局咆哮,而不应该更新其他p:消息。

xhtml:

<h:body>
    <p:growl id="growlGeneralMessages" showDetail="true" sticky="true" globalOnly="true" /> 
    <h:form id="register_new_student" enctype="multipart/form-data" >
       <p:messages autoUpdate="true" />
       <p:commandButton id="new_student_action" value="Add"  update="register_new_student_panel" validateClient="true" action="#{teacherPresentation.newStudentAction()}" />
   </h:form>
</h:body>

背豆:

public String newStudentAction() {
    FacesContext context = FacesContext.getCurrentInstance();
    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Wrong username or password!", "");
    context.addMessage(null, message);
    context.getExternalContext().getFlash().setKeepMessages(true);
    return "teacher.xhtml?faces-redirect=true";
}

我试了两件事,但都没用:

1-从p:messages(fail)中删除属性autoUpdate

2-在addMessage方法中指定客户端id

context.addMessage(null,message);-->context.addMessage("growlGeneralMessages",消息);(也失败了)

我认为你有两个选项来控制它

密钥选项

p:growlp:messages都有一个for属性,可以将这些组件绑定到一个键。您可以使用该键作为FacesContext.addMessage()clientId参数来控制您希望在每个组件上显示哪些消息

这就是我的意思:

<p:growl for="growlKey"/>

在BackBean中:

facesCtx.addMessage("grwolKey", facesMsg);

严重性选项

同样,这两个组件都有一个severity参数,可以让你控制在中显示什么消息。例如,你可以用info表示咆哮,用error表示消息,或者其他什么。

创建FacesMessage时,可以使用FacesMessage.Severity指定严重性。

FacesMessage facesMsg = new FacesMessage(
   FacesMessage.SEVERITY_ERROR, "Your title", "Your Message")

希望它能有所帮助!

最新更新