我需要在 上动态显示确认消息<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
是在<p:confirmDialog>
AJAX 请求之后显示的消息。
对此毫无疑问。这按预期工作。因此,我不会对此进行详细探讨。
然而,这需要向服务器发送一个 AJAX 请求,只是为了获取一个简单的确认消息。我觉得这是非常不必要的。在将实际请求发送到服务器之前,应在客户端本身显示这样的确认消息。
因此,我正在寻找一种在客户端本身上执行此操作的方法,可能是使用常用的 JavaScript。这可以像往常一样简单地完成,就像显示confirm("Message")
带有Ok
和Cancel
按钮的 JavaScript 一样吗?
我正在使用 Primefaces 3.5。 现在是 4.0 最终版。现在是5.1决赛。