在<p:commandButton async =“ true”>

时间:2019-08-27 07:26:36

标签: jsf primefaces

我目前正在使用Spring Boot和Primefaces创建一个Lite应用程序,并遇到问题:如果出现问题,我无法在我的网站中创建错误消息。 这里是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>

请注意,async为true,因此在处理调用的方法“ 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中的responewriter为null。我添加了一个侦听器,该侦听器在tabclose事件中向咆哮添加了一条消息,并且效果很好。

public void onTabClose(TabCloseEvent event) {
    FacesMessage msg = new FacesMessage("Tab Closed", "Closed tab: " + event.getTab().getTitle());
    FacesContext.getCurrentInstance().addMessage(null, msg);
}

所以我知道如何显示用例中的错误消息?

谢谢

1 个答案:

答案 0 :(得分:0)

您需要在commandButton中使用git diff来告诉它在AJAX返回之后更新msgs组件。

update="msgs"