我需要在<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最终版。
答案 0 :(得分:1)
可能很简单replaceWith功能对您来说足够了:
<script>
jQuery("confirmDeleteMultiple.p").replaceWith(...
</script>
答案 1 :(得分:0)
您可以使用CSS样式display:none
将消息保留在XHTML页面中,并在JavaScript中进行验证,如果验证失败,只需将样式更改为display:block
。
没有AJAX。