0

リストに従って動的にパネルにタブを生成する機能を実現しようとしています。

リストは、たとえば人などのオブジェクトです

各人物に対応する属性を、フォーム内の各タブに表示しています。値は正しくロードされますが、それらの値を編集すると、バッキング Bean で更新された値が取得されず、古い値しか取得されません。

誰かが理由を説明してもらえますか?

これがコードです。

人物オブジェクト

public class Person {

    String name;

    //getter setter

    @Override
    public String toString() {
        return name;
    }
}

バッキングビーン

@ManagedBean(name = "editor")
public class EditorBean {

    private List<Person> persons = new ArrayList<Person>();

    @PostConstruct
    void init() {
        persons.add(new Person("dhruv"));
        persons.add(new Person("tarun"));
    }

    public void testAction() {
        System.out.println(persons);
    }

    // Getter Setter*****************//
    public List<Person> getPersons() {
        return persons;
    }

    public void setPersons(List<Person> persons) {
        this.persons = persons;
    }
}

XHTML コード:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui">

<h:head>
</h:head>
<h:body>
    <h1>Hello World PrimeFaces</h1>

    <h:form>
        <p:accordionPanel value="#{editor.persons}" var="person" dynamic="true">

            <p:tab title="#{person}">
                <p:inputText value="#{person.name}"></p:inputText>
            </p:tab>

        </p:accordionPanel>

        <p:commandButton action="#{editor.testAction()}" value="testAction"></p:commandButton>
    </h:form>

</h:body>
</html>

dynamic="false" で同じことを実行すると。これはうまくいきます。しかし、私の実際のシナリオでは、一度にペイントする余裕がないデータがたくさんあるため、dynamic = true を使用したいと考えています。

dynamic = true ではない場合、誰かがこれを達成する方法を説明できますか??

4

1 に答える 1

1

アコーディオンに古い値がある理由は、動的アコーディオンのデフォルトがcache="true". この属性により、アコーディオンは新しい/更新された値をリロードしません。タブを開いたときに ajax を更新するにcache="false"は、アコーディオンに設定します

于 2013-02-19T18:29:09.720 に答える