に確認メッセージを動的に表示する必要があります<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
で選択された行を保持する ListDataTable
です。AJAX リクエストの後にdeleteMultipleMsg
表示されるメッセージです。<p:confirmDialog>
それについてはまったく疑問の余地がありません。これは期待どおりに機能します。したがって、これについて詳しくは説明しません。
ただし、これには単純な確認メッセージを取得するためだけに AJAX リクエストをサーバーに送信する必要があります。これはかなり不要だと思います。このような確認メッセージは、実際のリクエストをサーバーに送信する前に、クライアント側で表示する必要があります。
そこで、おそらく通常の JavaScript を使用して、クライアント側でこれを行う方法を探しています。JavaScript とボタンが表示されるのとまったく同じように、これを通常どおりに単純に実行できconfirm("Message")
ますかOk
?Cancel
私はPrimefaces 3.5を使用しています。 これで 4.0 最終版です。これで5.1ファイナルです。