こんにちは、私はjsf 2.1で遊んでいます
私は次のハンドラーを持っています
@Controller("testHandler")
@Scope("request")
public class TestHandler {
public class EntityObject {
public EntityObject(String value) {
this.value = value;
}
private String value = "";
public String getValue() {
return value;
}
public void setValue(String value) {
log.info(this + " Set value from " + this.value + " to " + value);
this.value = value;
}
}
private Logger log = Logger.getLogger(getClass());
private List<EntityObject> objects = new ArrayList<TestHandler.EntityObject>();
@PostConstruct
public void init() {
log.info("INIT");
// addItem("O0");
addItem("O1");
addItem("O2");
addItem("O3");
}
private void addItem(String name) {
EntityObject e = new EntityObject(name);
log.info("add " + e + " with value " + name);
objects.add(e);
}
public List<EntityObject> getObjects() {
return objects;
}
public void setObjects(List<EntityObject> objects) {
this.objects = objects;
}
}
そしてこのjsf
<h:form>
<h:dataTable value="#{testHandler.objects}" var="object">
<h:column>
<h:inputText value="#{object.value}" />
</h:column>
</h:dataTable>
<h:commandButton value="submit" />
</h:form>
私はTomcatをデバッグモードで実行しているので、コードをホットリプレースできます。
今、私はページを開いています
init | INIT
addItem | add TestHandler$EntityObject@41c3cce3 with value O1
addItem | add TestHandler$EntityObject@1dc06cd0 with value O2
addItem | add TestHandler$EntityObject@4427daf2 with value O3
- 3つの入力フィールドを持つテーブルが表示されます
- 各値の末尾に「変更」を追加します
- 「addItem("O0");」のコメントを外します 初期化メソッドで
- 送信ボタンを押します
->
init | INIT
addItem | add TestHandler$EntityObject@5d653eaa with value O0
addItem | add TestHandler$EntityObject@21f53acd with value O1
addItem | add TestHandler$EntityObject@6ae77a25 with value O2
addItem | add TestHandler$EntityObject@30449f8 with value O3
setValue | TestHandler$EntityObject@5d653eaa Set value from O0 to O1change
setValue | TestHandler$EntityObject@21f53acd Set value from O1 to O2change
setValue | TestHandler$EntityObject@6ae77a25 Set value from O2 to O3change
ログでは、以前に参照されたオブジェクトに値が割り当てられていないようです.jsfはリストのインデックスを記憶し、間違ったオブジェクトを更新しているようです.
オブジェクトの更新に最適な範囲は? 最新のリストと、テーブルからオブジェクトへの信頼できるマッピングをアーカイブするにはどうすればよいですか?
equals と hashcode 関数を追加しても役に立たなかった