2016-12-21 7 views
0

p:picklistDualListModel<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>())); 
} 
+1

あなたがonEntitySelectを呼んでください:ここではサンプルはありますか?あなたのピックリストのデフォルト値はいつ設定しますか?間違いのためにあなたの豆の一部が再び呼び出されるかもしれません。さらなるヘルプを得るために[mcve]を投稿してください。 – lastresort

+0

デフォルト値は 'onEntitySelect()'が初めて呼び出されるときに設定されます。これは上のコードで分かるように、DualListModelを初期化するときもあります。 'onEntitySelect()'は ''によって呼び出されます。私はこれがIntelliJでシナリオ全体をデバッグすることで一度だけ解雇されることを確認しました。 –

+0

[mcve]最初のコメントでリクエストしてください。また、[ask]とhttp://www.stackoverflow.com/tags/jsf/infoも参照してください。 – Kukeltje

答えて

1

初期DualListModel

onEntitySelect():

<p:pickList id="pickList" value="#{dashboardBean.picklistAttributes}" var="attribute" 
    itemLabel="#{attribute)}" 
    itemValue="#{attribute}"/> 

<p:picklist>:。また、各onEntitySelectに新しいDualListModelを作成する代わりに、既存のDuaListModelsのソースとターゲットを新しいもので設定します。

private DualListModel<Attribute> attributes; 

@PostConstruct 
    public void init() { 

     // initialize service picklist 
     List<Attribute> source = new ArrayList<Attribute>(); 
     List<Attribute> target = new ArrayList<Attribute>(); 
     attributes= new DualListModel<Attribute>(source , target); 

    } 

public void onEntitySelect() { 
    // create your newAttributesSoruce and Target here then set to existing DualistModel 
    attributes.setSource(newAttributesSource); 
    attributes.setTarget(newAttributesTarget); 
} 
関連する問題