【问题标题】:How to put user-typed values into a List of Strings? [duplicate]如何将用户键入的值放入字符串列表中? [复制]
【发布时间】:2015-03-18 12:01:49
【问题描述】:

我当前的 JSF 版本是 2.1,我想找到一个简短的解决方案,将用户键入的 Strings 放入单个 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>

我需要将用户输入的每个值放入 inputTexts 到 values List&lt;String&gt; 中。我该怎么做或者有可能吗?

UPD:我需要完全使用 &lt;c:forEach&gt; 循环来执行此操作,因为我可能应该添加一些其他输入字段,例如 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>

【问题讨论】:

    标签: jsf jsf-2 foreach


    【解决方案1】:

    由于您使用的是 JSF 2,因此您可以使用 &lt;ui:repeat&gt; 标签替代 &lt;c:forEach&gt;(因为 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>
    

    【讨论】:

    • 不行,我需要遍历getIdentifiers()返回的集合。
    • 嗯...但是我怎样才能以 JSF 方式复制 &lt;c:choose&gt;?有可能吗?
    • 您可以将每个可视组件的&lt;c:choose&gt; 替换为rendered 属性。 rendered 属性需要一个boolean 表达式来表示组件是否应该显示在屏幕上。
    • 是的,它会的。我需要先渲染getIdentifiers().size() 输入,当用户填写输入并提交父表单时,我需要将值放入values 列表中。
    • 初始化values 列表时,将其设置为与getIdentifiers() 结果的大小相同。这样,所需的输入量就会呈现在屏幕上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2021-09-16
    • 2020-12-13
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多