【问题标题】:ice:repeat inputText with List<String>, if String is immutable?ice:使用 List<String> 重复 inputText,如果 String 是不可变的?
【发布时间】:2011-09-11 04:34:54
【问题描述】:

我希望 list 成为 List&lt;String&gt;。首先我显示一个inputText,每次用户在inputText 中输入数据时,我都会添加另一个空inputText。如果列表已经有一些值,我将它们全部显示 + 一个空值。
但它不起作用,因为字符串是不可变的
我为字符串制作了一个包装器作为一种解决方法,但我不喜欢它。
如何使inputText 引用支持列表中的位置?

<ice:repeat value="#{mBean.list}" var="xxx" valueChangeListener="{mBean.vcl}">
    <ice:inputText partialSubmit="true" value="#{xxx}" />
</ice:repeat>

【问题讨论】:

    标签: jsf immutability icefaces textinput repeat


    【解决方案1】:

    我不使用 IceFaces,但如果 &lt;ice:repeat&gt; 支持 varStatus 属性,如 JSTL 的 &lt;c:forEach&gt; 和 Facelets 的 &lt;ui:repeat&gt;,那么您可以在访问单个项目时提交到 List&lt;String&gt;列出索引而不是 var 属性,如以下 Facelet 示例:

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

    这种方式值由列表的设置器设置,List#set(index, value) 方法。

    除此之外,您最好的选择实际上是将字符串包装在一个 bean 中。然而,我非常肯定 JSTL &lt;c:forEach&gt; 也应该以上述方式为您解决问题,只要您没有将它嵌套在另一个 JSF 重复标记中。您只会错过&lt;ice:repeat&gt; 中的valueChangeListener 属性/功能。

    【讨论】:

    • 它有效,谢谢。对于新的空 inputText,我将一个空字符串添加到列表中。
    • 我回到这个问题。如果你有一个集合而不是列表,你没有集合中的索引怎么样。作为一种解决方法,我将集合转换为列表..
    • JSF 2.2 计划在DataModel 接口中支持Set。否则你最好的选择是自制一个类似于ListDataModel 的自定义DataModel 实现(困难的部分是有效地计算索引!)
    猜你喜欢
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多