[Seasar-user:15614] Re: 【Teeda】itemsSave項目のjavascriptによる追加、削除

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 9月 2日 (火) 16:00:18 JST


小林 (koichik) です.

Date:    Tue, 2 Sep 2008 11:00:12 +0900
From:    tanaka <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:15601] 【Teeda】itemsSave項目のjavascriptによる追加、削除

> [Seasar-user:11625]と同内容になると思いますが、
> itemsSave項目をjavascriptで追加、削除した場合
> POSTされた値のitemsSaveの内容が更新されず困っています。

itemsSave 自体は Java オブジェクトをシリアライズ
したものなので,JavaScript 側で更新できないと
思いますが.

xxxItems による繰り返し項目の追加・削除の
ことだと思いますが,それに合わせて itemsSave の
サイズを変更することは現在では対応済みです.

> [Seasar-user:11625]ではrequestから直接値を取得する事で
> ご対応されているようですが、

違いますよ.

[Seasar-user:11628]
> > nameを他の行のnameと同じように、
> > 「Form:aaaItems:1:aaaName」形式で設定すると取得することができました。
                                     ^^^^
というのは,例えば最初に 3 行表示されていたとして,

<tr><td><input name="form:xxxItems:0:aaa" /></td></tr>
<tr><td><input name="form:xxxItems:1:aaa" /></td></tr>
<tr><td><input name="form:xxxItems:2:aaa" /></td></tr>

1 行追加した場合は

<tr><td><input name="form:xxxItems:0:aaa" /></td></tr>
<tr><td><input name="form:xxxItems:1:aaa" /></td></tr>
<tr><td><input name="form:xxxItems:2:aaa" /></td></tr>
<tr><td><input name="form:xxxItems:3:aaa" /></td></tr>

となるように JavaScript で name 属性を
「設定」したということです.

また,1 行削除した場合は

<tr><td><input name="form:xxxItems:0:aaa" /></td></tr>
<tr><td><input name="form:xxxItems:1:aaa" /></td></tr>

となる必要があります.
削除したのが 1 行目であっても 2 行目であっても,
常に 0 から始まる順序でなくてはなりません.
# 配列の添え字のようなもの.

もし途中に行を追加したり,途中の行を削除したり
することがある場合は,itemsSave を持っていても
役に立たないので,itemsSave は使わず,Dto の
プロパティは全て (hidden などを使って) <input>
等で画面に持つ必要があります.

> これらの項目に対して
> teedaのvalidationをかけたい場合はどうしたら良いのでしょうか?

上記のようにすればバリデーションは行われます.
itemsSave はページクラスのプロパティを保持する
ためのものですが,バリデーションはページクラスに
対してではなく,UIComponent に対して行われます.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



Seasar-user メーリングリストの案内