在 Primefaces 中关闭对话框时更新数据表和消息

时间:2021-06-29 10:44:44

标签: jsf primefaces primefaces-datatable

我有一个相对简单的数据表,其中包含一个请求列表。我有用于批准和拒绝的命令按钮,顶部有一个用于提供反馈的消息部分。

对于批准,我只是处理所有内容并刷新数据表和消息,但对于拒绝,我想提示用户输入消息。无论我做什么,我都无法在对话框关闭时同时显示数据表更新和消息。我能做到的最好方法是在对话框关闭时让消息显示几毫秒。

所以我的页面以消息、表单和数据表开头

   <h:form id="form">

      <p:messages id="messages" showDetail="true" closable="true">
         <p:autoUpdate />
      </p:messages>

      <p:dataTable id="dtReqs" allowUnsorting="true" sortMode="single" value="#{myBean.openRequests}" var="req">

然后我有一个命令按钮来处理拒绝

<p:column headerText="Reject" width="60">
    <p:commandButton icon="pi pi-times" styleClass="rounded-button ui-button-danger"
               oncomplete="PF('rejectDlg').show()">
        <f:setPropertyActionListener value="#{req}" target="#{myBean.selectedRequest}" />
    </p:commandButton>
</p:column>

最后一个对话框来获取用户输入

<p:dialog id="inputDialog" widgetVar="rejectDlg" header="Enter Rejection Explanation" modal="true">         
    <p:ajax event="close" update=":form:dtReqs" />
    <p>Please enter a reason for rejection</p>
    <p:inputTextarea id="rejectReasonText" rows="5" cols="60" value="#{myBean.userMessage}" />
    <br /> <br />
    <p:commandButton value="Reject" action="#{myBean.processRejection}"
           icon="pi pi-times" styleClass="ui-button-danger" />
    <p:commandButton value="Cancel" onclick="PF('rejectDlg').hide()" />      
</p:dialog>

ViewScoped 烤豆然后有

public void procesRejection() {
  //handle updates and update variables

  FacesMessage msg = new FacesMessage("Title", "Content");
  FacesContext.getCurrentInstance().addMessage(null, msg);

}

当您单击对话框上的拒绝按钮时,代码按原样执行它需要做的所有处理(并且工作正常)并且消息显示在对话框后面,但表单没有关闭,数据表是仅在您单击取消或 x 关闭对话框时更新。

我尝试在拒绝按钮上添加 oncomplete 以关闭表单,虽然这有效并更新了数据表,但消息会闪烁一毫秒,然后与表单一起消失。我尝试在 processRejection 方法中关闭表单,但结果相同。

删除 ajax 关闭事件并将 oncomplete 添加到拒绝按钮以关闭对话框会关闭对话框并显示消息但不刷新数据表。

我怎样才能达到我想要的提示用户输入一些文本然后

  • 关闭对话框
  • 刷新数据表
  • 显示消息

0 个答案:

没有答案