4

我需要在 上动态显示确认消息<p:confirmDialog>。这可以通过在向服务器发送请求后使用 AJAX 更新此组件来完成。例如,

<p:column selectionMode="multiple">
    <f:facet name="footer">
        <p:commandButton oncomplete="confirmDeleteMultiple.show()"
                         update=":form:confirmDialogDeleteMultiple" 
                         process=":form:dataTable"
                         actionListener="#{bean.deleteMultipleActionListener}"/>
    </f:facet>
</p:column>

页脚的指定按钮<p:dataTable>可以更新里面设置的消息deleteMultipleActionListener(ActionEvent actionEvent){...}并更新指定的确认对话框,confirmDialogDeleteMultiple如下所示。

<p:confirmDialog id="confirmDialogDeleteMultiple"
                 widgetVar="confirmDeleteMultiple"
                 message="#{bean.deleteMultipleMsg}"
                 header="Header Message"
                 appendToBody="true" closable="true">

    <p:commandButton id="confirmDeleteMultiple"
                     value="Yes"
                     process="@this dataTable messages"
                     rendered="#{bean.renderedYesButtonMultipleDelete}" 
                     update="messages dataTable" 
                     oncomplete="confirmDeleteMultiple.hide()"
                     actionListener="#{bean.deleteMultiple}"/>

    <p:commandButton id="declineDeleteMultiple"
                     value="#{bean.noButtonTextMultipleDelete}" 
                     onclick="confirmDeleteMultiple.hide()"
                     type="button"/>
</p:confirmDialog>

托管 bean 如下所示。

@ManagedBean
@RequestScoped
public final class Bean {
    private String deleteMultipleMsg; //Getter only.
    private boolean renderedYesButtonMultipleDelete=true; //Getter only.
    private String noButtonTextMultipleDelete="No"; //Getter only.

    public void deleteMultipleActionListener(ActionEvent actionEvent) {
        if(selectedValues!=null&&!selectedValues.isEmpty()) {
            renderedYesButtonMultipleDelete=true;
            noButtonTextMultipleDelete="No";
            deleteMultipleMsg="Confirmation message.";
        } else {
            noButtonTextMultipleDelete="Ok";
            renderedYesButtonMultipleDelete=false;
            deleteMultipleMsg="Row selection message.";
        }
    }
}

selectedValues是一个列表,其中包含 中的选定行DataTabledeleteMultipleMsg是在<p:confirmDialog>AJAX 请求之后显示的消息。


对此毫无疑问。这按预期工作。因此,我不会对此进行详细探讨。

然而,这需要向服务器发送一个 AJAX 请求,只是为了获取一个简单的确认消息。我觉得这是非常不必要的。在将实际请求发送到服务器之前,应在客户端本身显示这样的确认消息。

因此,我正在寻找一种在客户端本身上执行此操作的方法,可能是使用常用的 JavaScript。这可以像往常一样简单地完成,就像显示confirm("Message")带有OkCancel按钮的 JavaScript 一样吗?

我正在使用 Primefaces 3.5。 现在是 4.0 最终版。现在是5.1决赛。

4

2 回答 2

1

可能简单的replaceWith函数对您来说就足够了:

<script>
jQuery("confirmDeleteMultiple.p").replaceWith(...

</script> 
于 2013-12-15T20:46:36.447 回答
0

您可以使用 CSS 样式将消息保留在 XHTML 页面中,display:none并在 JavaScript 中进行验证,如果验证失败,只需将样式更改为display:block. 没有 AJAX。

于 2013-06-22T18:28:40.727 回答