4

に確認メッセージを動的に表示する必要があります<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ファイナルです。

4

2 に答える 2

0

CSS スタイルを使用してメッセージを XHTML ページに保持し、display:noneJavaScript で検証を行うことができます。検証が失敗した場合は、スタイルを に変更するだけdisplay:blockです。いいえAJAX。

于 2013-06-22T18:28:40.727 に答える