在p:confirmDialog上显示动态消息,而不向服务器发送请求

时间:2013-06-22 18:13:20

标签: jsf primefaces jsf-2.2

我需要在<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是一个列表,用于保存DataTable中的所选行。 deleteMultipleMsg是在AJAX请求后<p:confirmDialog>上显示的消息。


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

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

所以,我正在寻找一种方法,可以通过使用常用的JavaScript在客户端本身执行此操作。这可以像往常一样完成,与显示confirm("Message")Ok按钮的JavaScript Cancel完全相同吗?

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

2 个答案:

答案 0 :(得分:1)

可能很简单replaceWith功能对您来说足够了:

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

</script> 

答案 1 :(得分:0)

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