是的,你可以,你需要遍历一个集合来为每个对象生成表格和输入字段,这是一个例子:
在这种情况下,集合中的对象是 Person 的实例:
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Name: " + name + ", age: " + age;
}
}
在您的托管 bean(在这种情况下,我使用 CDI)中,您需要填充集合:
@Named
@ViewScoped
public class SampleBean implements Serializable {
private static final long serialVersionUID = 1L;
private List<Person> dataSample;
@PostConstruct
private void init() {
dataSample = new ArrayList<>();
for (int i = 0; i < 5; i++) {
Person person = new Person();
dataSample.add(person);
}
}
public void process() {
dataSample.forEach(System.out::println);
}
public List<Person> getDataSample() {
return dataSample;
}
}
并在 JSF 视图文件中使用它:
<h:form>
<table class="table table-bordered table-hover">
<ui:repeat value="#{sampleBean.dataSample}" var="person">
<tr>
<td>Name:</td>
<td><h:inputText styleClass="form-control" value="#{person.name}" /></td>
<td>Age:</td>
<td><h:inputText styleClass="form-control" value="#{person.age}" /></td>
</tr>
</ui:repeat>
</table>
<h:commandButton actionListener="#{sampleBean.process()}" value="Send!" />
</h:form>
这将呈现一个包含 2 列和 5 行的表格,每行有 2 个输入(1 个用于“姓名”,另一个用于“年龄”)
我已提交值:
“彼得”和“23”
“塞缪尔”和“30”
“玛丽”和“19”
“贝蒂”和“22”
“索菲”和“28”
控制台中的结果是:
Name: Peter, age: 23
Name: Samuel, age: 30
Name: Mary, age: 19
Name: Betty, age: 22
Name: Sofi, age: 28