如何将用户输入的值放入字符串列表中?

时间:2015-03-18 12:01:49

标签: jsf jsf-2 foreach

我目前的JSF版本是2.1,我想找到一个简短的解决方案,将用户输入的String放入一个List。在托管bean中:

@ManagedBean
@SessionScoped
public class MyBean{

    private List<String> values;

    public void List<Integer> getIdentifiers(){
        List<Integer> lst = new ArrayList<Integer>();
        //...
        return lst;
    }

    //GET, SET, OTHER STUFF

}

和标记:

<c:forEach items="#{myBean.identifiers}" var="id">
    <h:inputText value="__WHAT?__" id="input#{id}" />
</c:forEach>

我需要将用户输入的每个值放入inputText values List<String>中。我怎么能这样做或者是否可能呢?

UPD:我需要在<c:forEach>循环中完全这样做,因为我可能会添加一些其他输入字段,例如rich:calendar,它们将按如下方式呈现:

<c:forEach items="#{myBean.identifiers}" var="id">
    <c:choose>
        <c:when test="__calendar_needed__">
            <rich:calendar />
        </c:when>
        <c:when test="__input_needed__">
             <h:inputText value="__WHAT?__" id="input#{id}" />
        </c:when>
    </c:choose>
</c:forEach>

1 个答案:

答案 0 :(得分:1)

由于您使用的是JSF 2,因此可以使用<ui:repeat>标记替代<c:forEach>(因为mixing JSTL with JSF can lead to strange behavior)。

此外,您可以直接将value属性设置为指向bean中的values集合(当然,您必须提供相应的访问者)。集合中的每个对象都将被称为item

<ui:repeat value="#{myBean.values}" var="item">
    <h:inputText value="#{item}" />
</ui:repeat>