[Seasar-user:14969] Re: [Teeda]forEach内のconditionについて

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 7月 9日 (水) 01:00:08 JST


小林 (koichik) です.

Date:    Tue, 8 Jul 2008 23:01:02 +0900 (JST)
From:    [E-MAIL ADDRESS DELETED]
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:14968] Re: [Teeda]forEach内のconditionについて

> 今回、forEach内でconditionを使用していることが原因で、
> このような問題が発生していると思っているのですが、

forEach の中で <form> を使うことは考えたこともないので
わかりませんが,<form> の中で forEach を使った場合は
condition を使っていなくても同じようにうまくいかないと
思います.

forEach の場合,xxxItems の要素である Dto のプロパティに
対応するプロパティをページクラスに持つ必要がありますが,
これは Teeda が使う作業用のエリアです.
その項目を次画面に引き継ぎたいのだと思いますが,作業用の
エリアは繰り返しの作業が終わると元の値に戻してしまいます.
つまり,押されたボタンの位置,例えば xxxItems[5] の Dto の
値が設定されて終わるわけではありません.
ですから,作業用のエリアをそのまま次画面に引き継いでも,
期待した値を受け取ることはできません.
それは condition を使っていなくても同じです.

先に示した 2 番目の方法は,選択された位置の Dto の値を
do〜() メソッドで作業用のエリアに設定するというものです.

forEach の中で <form> を使った場合,「戻る」の後でなければ
うまく動いているのかもしれませんが,なぜうまく動くのか
(調べないと) よくわからなかったりします.

> 例えば、dynamicPropertyを使用することで問題が解消する
> 可能性はありますでしょうか?

上記の通り,それだけでは解消しないと思いますし,
display: none で非表示にした項目もバリデーションの
対象になるなど,別の問題で悩むことになるかと.

> ([Seasar-user:11043] 以降のやりとりを読むと、そもそも
> conditionが推奨されていないようにも見えました)

Teeda の condition は JSF の仕様から外れたところで無理矢理
実現している面があるので,使わなくてもすむなら使わない方が
無難です.
とはいえ,どうしても必要になることがあるから無理矢理にでも
実現しているということだと思いますが.


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