【问题标题】:jsf submit dynamically generated table with multiple <h:inputtext>jsf 提交具有多个 <h:inputtext> 的动态生成的表
【发布时间】:2018-02-15 00:24:48
【问题描述】:

我有一个动态生成的表,其中包含动态生成的 &lt;h:inputText/&gt; 字段。

我的问题是如何将我的所有 &lt;h:inputText/&gt; 发布到支持 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>    

我知道默认情况下,我必须使用 getter 和 setter 在我的支持 bean 中创建字段,但现在我不知道我将拥有多少个字段。

对不起,我还没开始解决它。

你有什么想法吗?请帮帮我。

【问题讨论】:

    标签: java jsf-2


    【解决方案1】:

    是的,你可以,你需要遍历一个集合来为每个对象生成表格和输入字段,这是一个例子:

    在这种情况下,集合中的对象是 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
    

    【讨论】:

    • 非常感谢 oyu,我的问题有点误导,但您的回答帮助我解决了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 2019-07-07
    • 2013-07-07
    • 1970-01-01
    相关资源
    最近更新 更多