如何将多个inputText映射到数组属性?

时间:2011-07-19 02:14:19

标签: jsf jsf-2

我希望用户在JSF的inputText组件中输入一个或多个名称。 所以我在想这样一个托管bean:

public class MyBean {

    private String[] names;

    public String[] getNames() {
        return names;
    }

    public void setNames(String[] names) {
        this.names = names;
    }
}

但是,如何将JSF的inputText组件映射到此数组属性?

2 个答案:

答案 0 :(得分:14)

首先,您需要在bean的(post)构造函数中保留数组。 E.g。

public MyBean() {
    names = new String[3];
}

然后,您可以 只通过硬编码索引

访问它们
<h:inputText value="#{myBean.names[0]}" />
<h:inputText value="#{myBean.names[1]}" />
<h:inputText value="#{myBean.names[2]}" />

使用<ui:repeat>varStatus通过动态索引访问它们

<ui:repeat value="#{myBean.names}" varStatus="loop">
    <h:inputText value="#{myBean.names[loop.index]}" />
</ui:repeat>

使用{/ 1}}属性,如

var

提交表单时不起作用,因为<ui:repeat value="#{myBean.names}" var="name"> <h:inputText value="#{name}" /> </ui:repeat> 没有值的设置器(getter基本上是String方法)。

答案 1 :(得分:2)

这是我如何使用上面的例子。

<c:forEach items="#{cotBean.form.conductor}" varStatus="numReg">
    <ice:panelGroup>
        <ice:selectOneMenu value="#{cotBean.form.conductor[numReg.index].gender}">
        </ice:selectOneMenu>
    </ice:panelGroup>
    <ice:panelGroup>
        <ice:selectOneMenu value="#{cotBean.form.conductor[numReg.index].dob.day}">
        </ice:selectOneMenu>
        <ice:selectOneMenu value="#{cotBean.form.conductor[numReg.index].dob.month}">
        </ice:selectOneMenu>
        <ice:selectOneMenu value="#{cotBean.form.conductor[numReg.index].dob.year}">
        </ice:selectOneMenu>
    </ice:panelGroup>
</c:forEach>