Я использую PF 5.3, с JSF 2.2

У меня есть глобальный p:growl, который будет обновляться в backBean, проблема в том, что всякий раз, когда я обновляю глобальный p:growl, другие p:messages также обновляются с теми же данными. Мне нужен способ обновить только глобальный рык в методе действия в backbean, а другие p:messages не должны обновляться.

xhtml:


     
    
       
       
   

задний боб:

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- удалить атрибут autoUpdate из p:messages (неудачно)

2- указать id клиента в методе addMessage

context.addMessage(null, message); --> context.addMessage("growlGeneralMessages", message); (это тоже не работает)

John

Ответов: 1

Ответы (1)

Я думаю, что у вас есть два варианта управления этим

Основная опция

Как p:growl, так и p:messages имеют атрибут for, который позволяет вам привязать эти компоненты к ключу. Вы можете контролировать, какие сообщения вы хотите показывать на каждом компоненте, используя этот ключ в качестве clientId параметра FacesContext.addMessage()

.

Это то, что я имею в виду:


А в BackBean:

facesCtx.addMessage("grwolKey", facesMsg);

Вариант тяжести

Кроме того, оба компонента имеют параметр severity, который позволяет вам контролировать, какие сообщения будут показаны. Например, вы можете использовать info для growl и error для messages, или что-то еще.

При создании FacesMessage вы можете указать серьезность с помощью FacesMessage.Severity.

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

Надеемся, это поможет!

2022 WebDevInsider