繁体   English   中英

jsf提交具有多个动态生成的表<h:inputtext>

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM