jsf - 在由触发的方法中创建时不显示咆哮消息
问题描述
我目前正在使用 spring boot 和 primefaces 创建一个小应用程序并且遇到问题,如果出现问题,我无法在我的网站中创建错误消息。这里有一些xhtml的代码:
<h:form id="form">
<p:growl id="msgs" showDetail="true"/>
...
<p:commandButton id="btnStartManualCopy" styleClass="pollUpdate" async="true" value="Start" disabled="#{daqScriptController.isProcessing()}" action="#{daqScriptController.startManualCopy}" />
</h:form>
请注意,异步为真,因此在调用方法“startManualCopy”正在处理时页面不会阻塞。
在“startManualCopy”方法中,如果在处理过程中出现任何错误并希望在页面上显示指定的消息 - 在咆哮声中,我也会处理错误。
到目前为止我已经尝试过:
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error:", "Some cool text); FacesContext.getCurrentInstance().addMessage(null, msg);
或者:
PrimeFacesContext.getCurrentInstance().addMessage(null, msg);
PrimeFaces.current().ajax().update(":msgs");
或者:
final RequestContext context = RequestContext.getCurrentInstance();
context.update(":msgs");
注意:我为 ids 尝试了一些其他组合,例如 :form:msgs 等等 - 所以我可以确定正确的组件被寻址。但在网络观察者中,响应从来没有真正有过内部更新。
我在调试时发现,在异步调用方法内的 facescontext 中,responwriter 为 null。我添加了一个侦听器,它在 tabclose 事件的咆哮声中添加了一条消息,这工作得很好。
public void onTabClose(TabCloseEvent event) {
FacesMessage msg = new FacesMessage("Tab Closed", "Closed tab: " + event.getTab().getTitle());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
所以知道如何显示我的用例中的错误消息吗?
谢谢
解决方案
您需要update="msgs"
在 commandButton 中告诉它在 AJAX 返回后更新 msgs 组件。
<p:commandButton async="true"
value="Start"
action="#{daqScriptController.startManualCopy}"
update="msgs" />
推荐阅读
- latex - 乳胶列表 emph
- react-native - 我可以在 React Native 中为每种语言使用不同的字体吗?
- javascript - 选择选项后删除选择占位符
- mysql - 如何将临时表与另一个表连接起来?
- node.js - 将猫鼬与node.js连接时如何修复UnhandledPromiseRejectionWarning?
- c# - 按范围包装整数值限制
- css - 如何使用 :not() 排除 CSS 中的元素和所有子元素
- java - 如何解决Android中的噪声屏幕错误?(就像电视里的噪音)
- ios - 如何在 SceneKit 中正确设置碰撞?
- java - “新 RemoteWebDriver(srvc.getUrl(),选项)”处的 NullPointerException