1

私は<p:selectOneMenu>エントリStringvalueChangeListenerそれを持っています。

意見:

<p:selectOneMenu value="#{myLdapEntry.oneMenuselectedValue}" effect="fade" style="font-size:12px;"
    valueChangeListener="#{myLdapEntry.menuValueChanged}">
    <f:selectItem itemLabel="" itemValue=""/>
    <f:selectItems value="#{treeBean.objclasslist}" var="objclass"
    itemLabel="#{objclass}" itemValue="#{objclass}" />
    <p:column>   
        #{o}  #{objclass}
    </p:column>
    <f:ajax event="change" render=":form:objclassAttrsValstab" />
</p:selectOneMenu>

モデル:

List<String> objectClassList = new ArrayList<String>();

public void menuValueChanged(ValueChangeEvent vce) {
    String newValue = vce.getNewValue().toString();
    objectClassList.add(newValue);
    System.out.println(objectClassList);
}

で以前に選択したすべてのアイテムを記憶したいと思いますobjectClassList。しかし問題は、常に最後に選択された項目のみが含まれ、それより前の項目は含まれないことです。Vectorの代わりに a を試してみましたListが、それでも同じ結果が得られます。

valueChangeListenerメソッドは毎回新しい Bean インスタンスを作成するため、objectClassList毎回再初期化されると思います。

これは本当ですか?これはどのように発生し、どうすれば解決できますか?

4

1 に答える 1

2

Beanがリクエストスコープの場合、これは実際に発生する可能性があります。その後、すべてのHTTPリクエストは、まったく新しいBeanインスタンスを作成します。そのような単純な。同じビューで対話しているときに同じBeanインスタンスが必要な場合は、代わりにビュースコープに配置する必要があります。

@ManagedBean
@ViewScoped
public class MyLdapEntry {
   // ... 
}

この問題は、使用するかどうかとはまったく関係valueChangeListenerありません。

参照:


具体的な問題とvalueChangeListenerは関係なく、ビジネスアクションやモデル値の操作を実行するのに完全に適切な場所ではありません。(および)<p:ajax listener>の代わりに使用してください。valueChangeListener<f:ajax>

<p:ajax listener="#{myLdapEntry.menuValueChanged}" update=":form:objclassAttrsValstab" />

public void menuValueChanged() {
    objectClassList.add(oneMenuselectedValue);
}

参照:

于 2012-10-17T11:45:36.427 に答える