我已经陷入了这个困境:
<rich:dataTable id="tabA" value="#{m.a}" rowKeyVar="nr" var="ex">
<rich:column><h:outputText value="Exercise #{nr + 1}:" /></rich:column>
<rich:column><h:inputText value="#{ex}" /></rich:column>
</rich:dataTable>
<h:panelGrid columns="2">
<a4j:commandButton value="+" title="new" ajaxSingle="true"
action="#{m.createNewExercise}" reRender="tabA"/>
<a4j:commandButton value="-" title="remove last" ajaxSingle="true"
action="#{m.deleteExercise}" reRender="tabA"/>
</h:panelGrid>
因为这是更大表格的一部分,所以我设置了ajaxSingle="true"
.
我正在迭代的值是一个字符串列表,定义如下:
@Entity
public class M {
...
private List<String> a = Lists.newArrayList();
@CollectionOfElements
public List<String> getA() { return a; }
public void setA(List<String> a) { this.a = a; }
}
这在提交时无法更新支持列表a
(提交是通过简单的 完成的<h:commandButton>
)。由于inputText
提交了元素的内容,JSF 似乎无法应用这些值。也许有人可以阐明这是否是@CollectionOfElements
因为M
.
所以我正在寻找的是一种ex
在调用createNewExercise
or时保存值的方法deleteExercise
,要么不必重新渲染完整的表,要么先将它们发送到服务器。
我可能可以通过此处建议的绑定使其工作,但我对避免绑定开销的方法感兴趣。