Мне нужно динамически отображать подтверждающее сообщение на <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>
Управляемый компонент выглядит следующим образом.
@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. Можно ли это сделать как обычно, точно так же, как отображается JavaScript confirm("Message")
с кнопками Ok
и Cancel
?
Я использую Primefaces 3.5. Теперь это 4.0 final. Теперь это 5.1 final.