Primefaces:accordionPanel中的可编辑对象,Dynamic = True

时间:2013-02-18 15:07:48

标签: ajax jsf-2 primefaces accordion

我正在尝试实现功能,我根据列表动态生成相应面板中的选项卡。

列表是一些对象,例如Person

现在属性对应于每个人,我在表单的每个标签中显示。 值被正确加载但是当我编辑这些值时,我没有在辅助bean上获得更新值,我只得到旧值。

有人可以解释一下原因吗?

这是代码。

人物对象

public class Person {

    String name;

    //getter setter

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

支持Bean

@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 ??

实现这一目标

1 个答案:

答案 0 :(得分:1)

您手风琴中有陈旧值的原因是动态手风琴默认为cache="true"。此属性使手风琴不重新加载新的/更新的值。要在选项卡打开时进行ajax刷新,请在手风琴上设置cache="false"