p:picklist
のDualListModel<String>
があります。各エンティティによって属性のリストが変更されるため、新しいエンティティが選択されるたびに、ピックリストを更新する必要があります。p:新しい値が設定されているにもかかわらず、picklistがキャッシュされる
onEntitySelect()
が再び呼び出された場合でも、ピックリストが最初に取り込まれる値は、setPicklistAttributes()
を使用してDualListModel
全体を変更しても保持されます。
セッター内にsysouts
を入れて、右の値をonEntitySelect()
で設定しますが、ほとんどの場合、古い値でセッターが再び呼び出され、変更が上書きされます。
どうしてですか? onEntitySelect()
の内部のDualListModel
をリセットする私の方法は間違っていますか? @PostConstruct注釈を持つinitメソッドに
public void onEntitySelect() {
currentAttributes = currentEntity.getAttributes();
List<Attribute> attributesSource =
currentAttributes.stream()
.sorted(this::compareLocalizedAttributeNames)
.collect(Collectors.toList());
setPicklistAttributes(new DualListModel<Attribute>(attributesSource, new ArrayList<Attribute>()));
}
あなたがonEntitySelectを呼んでください:ここではサンプルはありますか?あなたのピックリストのデフォルト値はいつ設定しますか?間違いのためにあなたの豆の一部が再び呼び出されるかもしれません。さらなるヘルプを得るために[mcve]を投稿してください。 – lastresort
デフォルト値は 'onEntitySelect()'が初めて呼び出されるときに設定されます。これは上のコードで分かるように、DualListModelを初期化するときもあります。 'onEntitySelect()'は '
'によって呼び出されます。私はこれがIntelliJでシナリオ全体をデバッグすることで一度だけ解雇されることを確認しました。 –
[mcve]最初のコメントでリクエストしてください。また、[ask]とhttp://www.stackoverflow.com/tags/jsf/infoも参照してください。 – Kukeltje