更新全局PrimeFaces时,如何防止更新p:消息

时间:2016-01-01 09:49:16

标签: jsf jsf-2 primefaces

我正在使用PF 5.3,使用JSF 2.2

我有一个全局p:growl,它将在backBean中更新,问题是每当我更新全局p:growl时,其他p:消息也会更新,并且具有相同的数据。我想要一种方法只更新后端bean中action方法中的全局growl,而不应该更新其他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>

回bean:

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(失败)中删除属性autoUpdate

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

context.addMessage(null,message); - &GT; context.addMessage(“growlGeneralMessages”,message); (也失败了)

1 个答案:

答案 0 :(得分:2)

我认为你有两种选择来控制它

键选项

re.searchp:growl都有一个p:messages属性,可以将这些组件绑定到一个键。您可以使用该密钥作为for

clientId参数来控制要在每个组件上显示的消息

这就是我的意思:

FacesContext.addMessage()

在BackBean中:

<p:growl for="growlKey"/>

严重性选项

同样,两个组件都有一个facesCtx.addMessage("grwolKey", facesMsg); 参数,可让您控制显示的消息。例如,您可以使用severity进行增长,info可以使用消息等等。< / p>

创建error时,您可以使用FacesMessage指定严重性。

FacesMessage.Severity

希望它有所帮助!