- PR -

[Struts] bean:write と Map の組み合わせで質問

1
投稿者投稿内容
espomax
会議室デビュー日: 2003/06/03
投稿数: 7
投稿日時: 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/02/17
投稿数: 55
投稿日時: 2003-06-23 22:13
とりあえずスクリプトレットで、ご希望のことは出来ます。

<bean:write name="pmap" property="<%= p %>"/>

でも、せっかくStruts使うなら、こういう処理はビジネスロジック側でやるようにして、JSはビューに徹した方が良いと思いますが...
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2003-06-24 09:34
引用:

うのきちさんの書き込み (2003-06-23 22:13) より:
とりあえずスクリプトレットで、ご希望のことは出来ます。

<bean:write name="pmap" property="<%= p %>"/>


ちょっと、本題と無関係の突っ込みになってしまいますが。
スクリプトレットは<%〜%>であり、<%=〜%>は式です。
espomax
会議室デビュー日: 2003/06/03
投稿数: 7
投稿日時: 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/02/17
投稿数: 55
投稿日時: 2003-06-24 10:48
ご指摘ありがとうございます。「スクリプト要素の式」ですね。

引用:

ちょっと、本題と無関係の突っ込みになってしまいますが。
スクリプトレットは<%〜%>であり、<%=〜%>は式です。

うのきち
ベテラン
会議室デビュー日: 2003/02/17
投稿数: 55
投稿日時: 2003-06-24 10:57
引用:

Map をテーブル代わりにして表示用の文字列に変換するという処理を
Model に実装すべきか、View に実装してもいいものかどうか
判断に迷っています。実際、この変換用の Map は Model 側で用意して
いるのですが、変換処理もやはり Model 側で実装すべきでしょうか。



最初の例は、商品コードと商品名のテーブルでしたので、こういうケースはモデルでやった方が良いと思います。
ただ、この例が、単に質問のための例なのでしたら、実際にどこでやるかはケースバイケースですね。ただ、むきだしのMapをビューで検索させるより、ビュー用のラッパオブジェクトを作るか、タグライブラリを作った方が良さそうです。
espomax
会議室デビュー日: 2003/06/03
投稿数: 7
投稿日時: 2003-06-24 21:50
うのきちさん丁寧な返信ありがとうございます。

アドバイス通り、ラッパクラスを用意して Map を抽象化させる方向で実装してみました。いい勉強になりました。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)