如何让我的JSF中的ArrayList动态打印?

时间:2014-07-17 00:55:32

标签: jsf arraylist datatable

当我使用列出的项目运行JSF时,我得到了第一部分,我可以成功输入详细信息,但它们不会像我希望的那样显示在屏幕上!你能帮忙吗?

这是我的index.xhtml代码:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <title>JSF Tester</title>
    </h:head>
    <h:body>
        <h:form>
            First name: <h:inputText value="#{PersonController.current.firstName}"/>
            Last name: <h:inputText value="#{PersonController.current.lastName}"/>
            Birth date: (mm-dd-yyyy) <h:inputText value="#{PersonController.current.date}">
                <f:convertDateTime dateStyle="full" type="date" timeZone="CST" pattern="MM-dd-yyyy"/>
            </h:inputText>
            <h:commandButton value="Submit Person" action="#{PersonController.savePerson()}" />

            <h:dataTable var="persons" value="#{PersonController.current}">
                <h:column>
                    <f:facet name="header">First Name</f:facet>
                        #{PersonController.current.firstName}
                </h:column>
                <h:column>
                    <f:facet name="header">Last Name</f:facet>               
                        #{PersonController.current.lastName}
                </h:column>
                <h:column>
                    <f:facet name="header">Date</f:facet>
                        #{PersonController.current.date}
                </h:column>
            </h:dataTable>

        </h:form>
    </h:body>
</html>

这是我的类包含ArrayList:

/**
 $ Id: PersonController.java v1.0, 7/16/2014
 $ Name: $
 */
package org.usd.csci.person.jsf;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author 
 */
@ManagedBean(name="PersonController")
@SessionScoped
public class PersonController implements Serializable {

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

    /**
     * Creates a new instance of PersonController
     */
    public PersonController() {
    }

    public Person getCurrent() {
        return current;
    }

    public List<Person> getPersons() {
        return persons;
    }

    public void savePerson() {
        persons.add(current);
        current = new Person();
    }
}

1 个答案:

答案 0 :(得分:0)

您正在以错误的方式设置数据表。它应该如下所示。

value参数应该针对ArrayList。在您的情况下PersonController.persons

var参数用于处理Person列表中的persons个对象。您可以随意命名。

访问Person对象的属性您将使用此var参数。例如,如果您将var设置为 var = "variableName",您可以使用Person variableName.firstName等访问variableName.lastName对象的属性。

<h:dataTable var="person" value="#{PersonController.persons}">
                <h:column>
                    <f:facet name="header">First Name</f:facet>
                        #{person.firstName}
                </h:column>
                <h:column>
                    <f:facet name="header">Last Name</f:facet>               
                        #{person.lastName}
                </h:column>
                <h:column>
                    <f:facet name="header">Date</f:facet>
                        #{person.date}
                </h:column>
            </h:dataTable>