0

我使用数组列表。我希望从实体类中存储数据。但它存储当前数据并从中删除以前的数据。我的 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();
}

也可以看看:


与具体问题无关,您的类和变量命名是不明智的并且非常混乱,因此其他人很难快速解释代码并发现问题。Rename TestArrayto Person, rename dataArrayto person, rename testArraytopersons和 rename DataTestBeanstoPersonManager或其他东西,您的代码立即变得更加自文档化并且更易于解释。

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 回答