[Seasar-user:3941] Re: [Teeda-Ajax] 画面の再表示をしない方法は?

松山 大樹 [E-MAIL ADDRESS DELETED]
2006年 6月 23日 (金) 13:45:46 JST


 松山です。
 いろんな方法を試してみた結果、次のような方法でうまくいくことが
わかりました。

<select id="sectionID" m:value="#{ajaxTestSessionForm.sectionID}"
	m:items="#{ajaxTestSessionForm.sectionList}"
	m:itemValue="value"
	m:itemLabel="label"
	m:escape="false"
	m:nullLabel="選択してください"
	onchange="changeSection(this)"
	/>
<select id="teamID" m:value="#{ajaxTestSessionForm.teamID}" 
	m:items="#{ajaxTest.teamList}"
	m:itemValue="value"
	m:itemLabel="label"
	m:escape="false"
/>

 上の<select>の m:items は、セッションスコープにあるDTO のList です。
 下の<select>の m:items は、PROTOTYPE に設定されたビジネスロジックのメソッドです。

 このような形で、上の<select> のonchange イベントにより、Teeda-Ajax を使用して、
下の<select>の内容を書き換えてやると、コンポーネントツリーに影響を及ぼさずに
画面の表示を書き換え、ボタンを押すことによってアクションを実行することができました。
 単純に表示だけであれば、下の<select> の m:items は指定しなくてもいいのですが、
いったん次の画面へ遷移した後、「戻る」ボタンなどで戻ってきたときに、生成した
<options> の内容を維持したいため、ビジネスロジックから取得しています。
 そのため、ajaxTest.teamList の中で、DTO にセットされている、上の<select> の値
(上記の例だと、sectionID)を参照して、それに応じたList を生成しています。

 ちょっと問題なのは、下の<select> に、
m:nullLabel="選択してください"
 を定義してあっても、Ajax で<options> を生成すると、「選択してください」の
行が生成されないことですが、これはビジネスロジック側で、
value = null、label = "選択してください" の要素をList の先頭に追加してやる
ことで解決しました。

 米林さんには、DMでいろいろと相談に乗っていただき、感謝しています。


<[E-MAIL ADDRESS DELETED]>さんの<01c301c6944a$926633a0$[E-MAIL ADDRESS DELETED]>から
>米林です。
>
>From: "松山 大樹" <[E-MAIL ADDRESS DELETED]>
>Sent: Tuesday, June 20, 2006 5:59 PM
>
>>  松山です。
>>
>>  Teeda-Ajax というよりは、JSF の問題かと思うのですが、質問させてください。
>>
>>  S2JSF1.0.14 + teeda-ajax-1.0-beta-3 で、開発をしているのですが、ある画面に
>> 2つのコンボボックスがあります。select1 と select2 とします。
>>  select1の、m:items の内容は、画面の初期化時にセットされるDTO内のList
>> の内容となります。select2 は m:items が指定されていません。
>>  select1 の、onchange() で、Teeda-Ajax を使用して、select2 のoptions を書き換
>>> ています。
>>
>>  このとき、ボタンを押すなどしてAction のメソッドを実行すると、画面が再表示さ
>れ、
>> select2 の内容が空に戻ってしまいます。Action のメソッドは実行されません。
>> もう一度、ボタンを押すと、Action のメソッドが実行されます。
>>
>>  要するに、select2 のoptions を書き換えたことによって、コンポーネントツリーが
>> 変化するので、それに対する再描画(?)が発生しているのだと思うのですが、これを
>> 回避する方法はないでしょうか?
>>
>>  select2 の、m:items にDTO内の別のList を割り当て、Teeda-Ajax で値を取得する
>ときに
>> 同時にList の内容をセットしてやったりしたのですが、select2 が空にならなくなっ
>>> だけで、再描画は同様に発生します。
>>
>>  同じような画面を作っている方、うまい逃げ方をご存じであれば、教えてください。
>
>現象確認しますので、少し時間を下さい。
>
>よろしくお願いします。
>
>_______________________________________________
>Seasar-user mailing list
>[E-MAIL ADDRESS DELETED]
>https://www.seasar.org/mailman/listinfo/seasar-user

-- 
::: 株式会社ワウワウ・コミュニケーションズ http://www.wowcom.co.jp/
:::   ITシステム・インテグレートDiv.
:::  Web・ソリューション&システム開発Unit.
:::   松山 大樹 - [E-MAIL ADDRESS DELETED]





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