[Seasar-user:12532] [Teeda]forEach内でのconditionについて
Toru
[E-MAIL ADDRESS DELETED]
2008年 1月 17日 (木) 01:35:05 JST
鈴木と申します。
初めて投稿いたします。
Teeda 1.0.12-rc1のforEach構文内で、conditionを使用して
入力欄を表示するようにした場合、
登録ボタンを押下して再表示すると、一番最後のconditionで
表示している項目しか更新されませんでした。
<例>
<td class="common_center_td"><input type="submit" id="doOnceRegist" value="登録" te:renderJs="true"/></td>
<div id="itemDataItems">
<div id="isInputText">
<td><input type="text" id="itemValue" size="10" maxlength="10"/></td>
</div>
<div id="isTextarea">
<td class="common_center_td"><textarea id="itemValue" cols="5" rows="3"/></td>
</div>
</div>
どのように対応すればいいか教えていただけないでしょうか?
少し調べたところ、ComponentStatesのsaveDescendantComponentStatesメソッド
で、描画していない項目に対しても設定しているため、
上書きされてしまっているようでした。
とりあえず、saveDescendantComponentStatesを実行するのは、
UIComponent.isRenderedがtrueの場合のみにすれば、
入力した値で更新されるようになりました。
public void saveDescendantComponentStates(FacesContext context, UIComponent component) {
for (final Iterator it = component.getFacetsAndChildren(); it.hasNext();) {
final UIComponent child = (UIComponent)it.next();
if (child instanceof EditableValueHolder) {
final EditableValueHolder holder = (EditableValueHolder)child;
final SavedState state = new SavedState();
final String clientId = child.getClientId(context);
state.save(holder);
savedStates.put(clientId, state);
}
if (child.isRendered()) { // 追加
saveDescendantComponentStates(context, child);
}
}
}
的外れな内容でしたら、本当に申し訳ありません。
以上、よろしくお願いいたします。
--
Toru <[E-MAIL ADDRESS DELETED]>
Seasar-user メーリングリストの案内