EDIT: 説明を見つけ(f:eventで遊んで)、PFが想定していた動作をしていること、つまり、検証フェーズが失敗したため、PFフレームワーク自体のバッキングBeanの値が更新されていないことを確認しました(したがって、更新をスキップしますモデル値フェーズに直接移行し、直接レンダリング フェーズに進みます) ソース/ターゲット リストは以前のままです。
次のコードがあります。
<p:pickList
id="parentpicklist"
value="#{manager.parent}"
var="entity"
itemValue="#{entity}"
labelDisplay="true"
required="true"
rendered="#{not empty manager.parent.source or not empty manager.parent.target}">
ページの最後に、次のような ap:commandButton があります。
<p:commandButton
action="#{manager.save}"
value="#{messages.saveLabel}"
title="#{messages.saveHint}"
update="edit-extract" <!-- the picklist resides inside of this component -->
rendered="#{manager.editMode}">
シナリオ: ページにはこのピックリストがあり、ソース リストとターゲット リストに値が入力されています。つまり、どちらも空ではありません。 問題は次のとおりです。ターゲット リストからすべてのアイテムを削除して [保存] を押すと、検証が失敗し、検証が必要であると表示されます。ここまでは順調ですね。
問題:検証が失敗したことを示すだけpicklist
でなく、ページの読み込み時に を初期値で更新します。これは PF の標準的な動作ですか?
p:commandButton
デフォルトとして持っているためですprocess="@form"
(フォーム内にあるを検証しているのはそのためですpicklist
)。イベントなどで、自分でターゲットリストのコンテンツを設定するためにいくつかのことを試しましたonTransfer
。しかし、それはターゲットリストを更新しません->検証が失敗し、ターゲットリストが更新されないように見えます( jsf検証が失敗し、フェーズに直接進みますrenderResponse
。つまり、モデル値は更新されません)。初期値が読み込まれます。
よろしくお願いします、
プログラミングは素晴らしい