- - PR -
[Struts] bean:write と Map の組み合わせで質問
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-06-23 17:11
Struts 1.1RC1 を使ったウェブアプリケーションを構築する際に、
java.util.Map の実装クラスが保持した値を JSP 上で利用するのに 苦戦しています。 具体的には、 Map pmap = new HashMap(); pmap.put("A001", "商品1"); pmap.put("A002", "商品2"); context.setAttribute("pmap", pmap); としておいて、商品コードと商品名の対応付けを Map で保持して おいて、JSP の画面表記にそれを使おうとしています。 <bean:write name="pmap" property="A001"/> とすれば「商品1」と出力されるところまでは良いのですが、 property="A001" のところを動的な値にしたい場合にどうしたら いいのか頭を悩ませています。ActionForm から商品コードを 取り出して、それを Map で商品名に変換して画面に出力させたいのです。 <bean:define id="p" name="actionForm" property="pcode"/> <bean:write name="pmap" property="p"/> これだと文法エラーになりますし、他に良い方法が見つかっていません。 Struts タグライブラリにこだわらずにやるしかないでしょうか。できれば Struts タグライブラリに定義されているタグのみで完結させたいと 思っています。 (あるいは、商品コードから商品名への変換をサーブレットで やってしまって JSP からはそれを利用するしかないでしょうか。) どなたかご存知の方がいましたら、ポインタでも構いませんのでご教示の ほどよろしくお願いします。 | ||||
|
投稿日時: 2003-06-23 22:13
とりあえずスクリプトレットで、ご希望のことは出来ます。
<bean:write name="pmap" property="<%= p %>"/> でも、せっかくStruts使うなら、こういう処理はビジネスロジック側でやるようにして、JSはビューに徹した方が良いと思いますが... | ||||
|
投稿日時: 2003-06-24 09:34
ちょっと、本題と無関係の突っ込みになってしまいますが。 スクリプトレットは<%〜%>であり、<%=〜%>は式です。 | ||||
|
投稿日時: 2003-06-24 10:22
うのきちさん、takuさん、返信ありがとうございます。
<bean:write name="pmap" property="<%= p %>"/> で出来るのですね。何度かトライしてみてコンパイルエラーになったので できないのかと思っていました。 <bean:define id="p" name="actionForm" property="pcode" type="java.lang.String"/> <bean:write name="pmap" property="<%= p %>"/> とすることで出来ました。type="java.lang.String" を付けていなかった のが原因だったようです。 > せっかくStruts使うなら、こういう処理はビジネスロジック側でやるようにして Map をテーブル代わりにして表示用の文字列に変換するという処理を Model に実装すべきか、View に実装してもいいものかどうか 判断に迷っています。実際、この変換用の Map は Model 側で用意して いるのですが、変換処理もやはり Model 側で実装すべきでしょうか。 Model に実装するとして、どういう設計にすればスムーズに取り込めるかも 考えてみます。 | ||||
|
投稿日時: 2003-06-24 10:48
ご指摘ありがとうございます。「スクリプト要素の式」ですね。
| ||||
|
投稿日時: 2003-06-24 10:57
最初の例は、商品コードと商品名のテーブルでしたので、こういうケースはモデルでやった方が良いと思います。 ただ、この例が、単に質問のための例なのでしたら、実際にどこでやるかはケースバイケースですね。ただ、むきだしのMapをビューで検索させるより、ビュー用のラッパオブジェクトを作るか、タグライブラリを作った方が良さそうです。 | ||||
|
投稿日時: 2003-06-24 21:50
うのきちさん丁寧な返信ありがとうございます。
アドバイス通り、ラッパクラスを用意して Map を抽象化させる方向で実装してみました。いい勉強になりました。 ありがとうございました。 | ||||
1
