【问题标题】:Unable to set input values in List<String> when using a4j:repeat使用 a4j:repeat 时无法在 List<String> 中设置输入值
【发布时间】:2013-04-18 16:31:11
【问题描述】:

我正在使用&lt;a4j:repeat&gt; 在可编辑文本框内的 UI 上显示来自List&lt;String&gt; 的信息。用户可以单击 UI 上的按钮来添加更多文本框并向其中添加值(使用 ajax 调用)。我的问题是我无法将用户输入的值设置回List&lt;String&gt;

下面是视图

<a4j:repeat value="#{implMemoMBean.objA.objB.objC.listBillNumber}" var="item">                      
    <h:inputText class="list-bill"  value="#{item}" />                                          
</a4j:repeat>

当用户单击“添加”按钮时要添加的 bean 中的代码如下

objA.objB().objC().getListBillNumber().add("");

这会将String 添加到List&lt;String&gt; 并重新呈现UI,然后显示一个额外的文本框。在此文本框中输入的值未在回发时设置。

这是怎么引起的,我该如何解决?

【问题讨论】:

    标签: jsf jsf-1.2 repeat ajax4jsf


    【解决方案1】:

    String 类是不可变的,并且没有值的设置器。没有什么像String#set(newString) 这样的东西。 getter 基本上就是Object#toString() 方法。

    您需要通过循环索引直接在List 上获取/设置值。可以使用rowKeyVar属性定义当前循环索引的EL变量名。

    <a4j:repeat value="#{implMemoMBean.objA.objB.objC.listBillNumber}" rowKeyVar="i">                       
        <h:inputText class="list-bill" value="#{implMemoMBean.objA.objB.objC.listBillNumber[i]}" />                                           
    </a4j:repeat>
    

    请注意,listBillNumber 不需要设置器。 EL 将通过List#get(index) 获取项目并通过List#add(index,item) 设置项目。

    【讨论】:

    • 非常感谢巴鲁。这解决了我的问题。有点尴尬,我什至明白问题出在哪里。结果真是太棒了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多