jsf 提交动态生成 table 与多个 <h:inputtext>
jsf submit dynamically generated table with multiple <h:inputtext>
我有一个动态生成的 table 和动态生成的 <h:inputText/>
字段。
我的问题是如何 post 我的所有 <h:inputText/>
到支持 bean。
这是我的 table 的样子:
<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 创建字段,但现在我不知道我将拥有多少字段。
抱歉,我什至没有开始解决它。
你有什么想法吗?请帮助我。
可以,您需要遍历集合以生成每个对象的 table 和输入字段,这是一个示例:
在这种情况下,集合中的对象是 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 行的 table,每行 2 个输入(1 个用于 'name',另一个用于 'age')
我已经提交了以下值:
'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
我有一个动态生成的 table 和动态生成的 <h:inputText/>
字段。
我的问题是如何 post 我的所有 <h:inputText/>
到支持 bean。
这是我的 table 的样子:
<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 创建字段,但现在我不知道我将拥有多少字段。
抱歉,我什至没有开始解决它。
你有什么想法吗?请帮助我。
可以,您需要遍历集合以生成每个对象的 table 和输入字段,这是一个示例:
在这种情况下,集合中的对象是 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 行的 table,每行 2 个输入(1 个用于 'name',另一个用于 'age')
我已经提交了以下值: '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