[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 メーリングリストの案内