Primefaces 13.0.2
你知道,永远是客户。
我有 CRUD 视图,一切正常。
不专心的用户会说:
我知道,
p:growl
可以设置为显示更长时间的消息和/或者您必须关闭。
但也有一些用户会抱怨。
我正在寻找一种为用户提供额外视图的方法,可以在其中显示最后的消息。 所以用户可以稍后再看,当他/她阅读速度很慢时等等。
所以我想捕获视图中我的
p:growl
元素显示的所有消息。
我尝试使用
<p:growl binding="#{growlMessages.growl}" .../>
并使用 FacesContext context = FacesContext.getCurrentInstance().getMessage<*>
方法,但我可以获得所有消息。
我收到一些消息(例如:从我的登录过程中,我向咆哮者发送“欢迎”)。 但我无法得到约束或 bean 验证错误。
知道如何“捕获”所有消息吗?
提前致谢。
得到提示后我找到了以下解决方案。
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 都已被捕获。