1

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

下面是视图

<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<String>重新呈现 UI,然后会显示一个额外的文本框。在此文本框中输入的值未在回发时设置。

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

4

1 回答 1

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)

于 2013-04-25T14:01:54.050 回答