捕获发送到p:growl的所有消息

问题描述 投票:0回答:1

Primefaces 13.0.2

你知道,永远是客户。

我有 CRUD 视图,一切正常。

  • 我有一个p:咆哮
  • 显示 Bean 验证错误
  • 显示数据库约束错误
  • 显示应用程序创建的消息。
  • ....

不专心的用户会说:

  • 是的,有一条消息,但我看不懂
  • 是的,我还没读过
  • ....

我知道,

p:growl
可以设置为显示更长时间的消息和/或者您必须关闭。 但也有一些用户会抱怨。

我正在寻找一种为用户提供额外视图的方法,可以在其中显示最后的消息。 所以用户可以稍后再看,当他/她阅读速度很慢时等等。

所以我想捕获视图中我的

p:growl
元素显示的所有消息。

我尝试使用

<p:growl binding="#{growlMessages.growl}" .../>
并使用
FacesContext context = FacesContext.getCurrentInstance().getMessage<*>
方法,但我可以获得所有消息。

我收到一些消息(例如:从我的登录过程中,我向咆哮者发送“欢迎”)。 但我无法得到约束或 bean 验证错误。

知道如何“捕获”所有消息吗?

提前致谢。

primefaces
1个回答
0
投票

得到提示后我找到了以下解决方案。

faces-config.xml

...
  <lifecycle>
    <phase-listener>myPkg.AppPhaseListener</phase-listener>
  </lifecycle>
...

AppPhaseListener

public class AppPhaseListener implements PhaseListener {
    private static final long serialVersionUID = -5974057200472814047L;

    @Inject
    private GrowlMessages growlMessages;

    @Override
    public void afterPhase(PhaseEvent event) {
    }

    @Override
    public void beforePhase(PhaseEvent event) {
        if (growlMessages != null) {
            FacesContext context = event.getFacesContext();
            for (Iterator<String> iterator = context.getClientIdsWithMessages(); iterator.hasNext();) {
                String clientId = iterator.next();
                for (Iterator<FacesMessage> messageIter = context.getMessages(clientId); messageIter.hasNext();) {
                    FacesMessage message = messageIter.next();
                    growlMessages.add(clientId, message);
                }
            }
        }
    }

    @Override
    public PhaseId getPhaseId() {
        return PhaseId.RENDER_RESPONSE;
    }

}

GrowlMessages
将捕获消息,添加时间戳并提供给 UI。 在 UI 中,我有一个
p:sidebar
p:datatable
,使用
GrowlMessages
。 到目前为止,我看到所有 FacesMessage 都已被捕获。

© www.soinside.com 2019 - 2024. All rights reserved.