リストに従って動的にパネルにタブを生成する機能を実現しようとしています。
リストは、たとえば人などのオブジェクトです
各人物に対応する属性を、フォーム内の各タブに表示しています。値は正しくロードされますが、それらの値を編集すると、バッキング 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 ではない場合、誰かがこれを達成する方法を説明できますか??