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