私はこれに行き詰まっています:
<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
deleteExercise
おそらくここで提案されているようなバインディングを介して機能させることができますが、バインディングのオーバーヘッドを回避する方法に興味があります。