0

arrayListを使用します。Entityクラスのデータストアが必要ですが、現在のデータを保存し、以前のデータを削除します。私のJSFページコード:

  <html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:p="http://primefaces.org/ui"
  xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:head>
    <title>Facelet Title</title>
</h:head>
<h:body>
    <h:form>
        <h:outputText value="ID"/><br/>
        <h:inputText value="#{dataTestBeans.data.id}"/><br/>
        <h:outputText value="Name"/><br/>
        <h:inputText value="#{dataTestBeans.data.name}"/><br/>
        <h:outputText value="Address"/><br/>
        <h:inputText value="#{dataTestBeans.data.address}"/><br/>
        <h:outputText value="Birth Day"/><br/>
        <h:inputText value="#{dataTestBeans.data.birthDay}"/><br/>
        <h:commandButton action="#{dataTestBeans.abc}" value="Submit" />
    </h:form>
    <h:form>
        <c:forEach items="#{dataTestBeans.testArray}" var="dataTest">
            <h:outputText value="#{dataTest.id}"/><br/>
            <h:outputText value="#{dataTest.name}"/><br/>
            <h:outputText value="#{dataTest.address}"/><br/>
            <h:outputText value="#{dataTest.birthDay}"/><br/>
        </c:forEach>
    </h:form>
  </h:body>
 </html>

私のエンティティクラスコード:

@ManagedBean(name = "person")
@SessionScoped
public class Person{

private String id;
private String name;
private String address;
private String birthDay;

public Person() {
}
    //getter and setter all veriable

}

私のコントローラーBeansコード:

@ManagedBean(name="dataTestBeans")
@SessionScoped
public class DataTestBeans {

private Person dataArray;
private List<Person> person = new ArrayList<Person>();   

public DataTestBeans() {
 }

public Person getData() {
  if (dataArray == null) {
      dataArray = new Person();
  }
 return dataArray;
 }

public void abc() {
   person.add(dataArray);
 }

public List<Person> getTestArray() {
  return person;
 }

public void setTestArray(List<Person> person) {
    this.person = person;
  }
}

実行すると、現在のデータが表示されます

4

1 に答える 1

1

すべてのデータエントリに同じ参照を再利用しています。したがって、基本的に毎回上書きします。メソッドに入力されたエントリを追加した後、新しいエントリを作成する必要がありますabc()

現在のコードの次の部分を置き換えます。

private TestArray dataArray;
private List<TestArray> testArray = new ArrayList<TestArray>();

public DataTestBeans() {
}

public TestArray getData() {
    if (dataArray == null) {
        dataArray = new TestArray();
    }
    return dataArray;
 }

public void abc() {
    testArray.add(dataArray);
}

private TestArray dataArray;
private List<TestArray> testArray;

public DataTestBeans() {
    dataArray = new TestArray();
    testArray = new ArrayList<TestArray>()
}

public TestArray getData() {
    return dataArray;
 }

public void abc() {
    testArray.add(dataArray);
    dataArray = new TestArray();
}

参照:


具体的な問題とは関係なく、クラスと変数の命名は無意味で非常に混乱しているため、他の人がコードをすばやく解釈して問題を特定することは困難です。名前のTestArray変更Person、名前のdataArray変更person、名前の変更、名前の変更などtestArrayを行うと、コードは即座に自己文書化され、解釈しやすくなります。personsDataTestBeansPersonManager

private Person person;
private List<Person> persons;

public PersonManager() {
    person = new Person();
    persons = new ArrayList<Person>()
}

public Person getPerson() {
    return person;
 }

public void add() {
    persons.add(person);
    person = new Person();
}
于 2012-08-12T13:21:52.767 に答える