[英]jsf submit dynamically generated table with multiple <h:inputtext>
我有一个动态生成的表,其中带有动态生成的<h:inputText/>
字段。
我的问题是如何将所有<h:inputText/>
到支持bean。
这是我的表格的样子:
<table class="table table-bordered table-hover">
<ui:repeat value="#{mainWorkerMB.showAvailableEventDetailTypes()}" var="eventDetail">
<tr>
<td>
<h:outputText value="#{eventDetail.edtyName}"></h:outputText>
</td>
<td>
h:inputText styleClass="form-control" value="#{mainWorkerMB.edtyId}" />
</td>
</tr>
</ui:repeat>
</table>
我知道默认情况下,我必须在后台bean中创建带有getter和setter的字段,但是现在我不知道会有多少字段。
抱歉,为此,我什至没有开始解决。
你有什么主意吗? 请帮帮我。
是的,可以,您需要遍历一个集合以生成表和每个对象的输入字段,这是一个示例:
在这种情况下,集合中的对象是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”代表“姓名”,其他代表“年龄”)
我提交了以下值:“ Peter”和“ 23”,“ Samuel”和“ 30”,“ Mary”和“ 19”,“ Betty”和“ 22”,“ Sofi”和“ 28”
控制台中的结果是:
Name: Peter, age: 23
Name: Samuel, age: 30
Name: Mary, age: 19
Name: Betty, age: 22
Name: Sofi, age: 28
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.