2

2 つの列を持つテーブルを含むフォームがあります。各行には、チェックボックスと入力フィールドがあります。チェックボックスは特定の行の削除用ですが、入力フィールドは値の (一括) 編集用です。各入力フィールドは Bean 検証を使用します。さらに、「削除」用と「保存」用の 2 つのボタンがあります。すべてがプライムフェイスに基づいています。

<h:form>
    <p:dataTable value="#{backingBean.list}" var="entry" id="table">
        <p:column>
            <p:selectBooleanCheckbox value="#{entry.flagDelete}" />
        </p:column>

        <p:column>
            <p:inputText value="#{entry.value}" />
        </p:column>
    </p:dataTable>

    <p:commandButton value="save" actionListener="#{backingBean.save}" process="table @this" update="table" />

    <p:commandButton value="delete" actionListener="#{backingBean.delete}" process="@([type=checkbox]) @this" update="table" />
</h:form>

(JSF 2 では、'process' は 'execute' に相当し、'update' は 'render' に相当します)

これで、入力フィールドを検証せずに選択した行を削除できるはずです。したがって、primfaces ajax セレクター (jQuery セレクター API に基づく) を使用して、ajax リクエスト中に処理する必要があるチェックボックスのみを選択しました。入力フィールドの値は引き続きサーバーに送信されますが、処理されません。

問題は、ajax リクエスト後のテーブルの再レンダリングです。削除ボタンがクリックされる前に入力された値を入力フィールドに保持する必要があります (ユーザーが保存ボタンで変更を保存しなかった場合)。これらの値はサーバーに送信されるため、これはそれほど大したことではありません (たとえば、検証が失敗した場合、最後に入力された値も取得します)。しかし、実際には、バッキング Bean に格納されている値を取得します。これを達成する方法に関するオプション/解決策はありますか?

4

0 に答える 0