- PR -

ストラッツ:been:defineで取得したMapをhtml:hiddenにセットする方法

投稿者投稿内容
java初心者
ベテラン
会議室デビュー日: 2007/07/23
投稿数: 54
投稿日時: 2007-08-01 12:01
nagise様

ご回答ありがとうございます。
sessionを使用するしか方法はないようなのですね…。

sessionは使用できないので、
submitからactionに飛んだ際に、再度Mapを取得する方法に
しようかと思います。(Mapの値はDBから取得しているので処理が重くなりそうですが…)

お忙しいところ、ありがとうございました。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2007-08-01 12:54
引用:

sessionを使用するしか方法はないようなのですね…。



いや、そういうわけではないですよ。Mapの中身を取り出して、hiddenに設定
すればできないわけでは無いが、Mapを丸ごと設定できるような楽な方式は、
Strutsでは用意されていないということです。
Map -> シリアライズ -> デコード(Base64など)
をすればできないことはないです。XMLシリアライザーをを使う方法もある
でしょうし。ただし、通信量が増えるだけであまりメリットは無いかもしれませんが。




[ メッセージ編集済み 編集者: 小僧 編集日時 2007-08-01 12:56 ]
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-08-01 13:09
補足しておくと、一旦HTMLにしてブラウザに渡された情報というのは、信用できないんですね。
かなり簡単にユーザによって書き換えることができてしまう。
HTMLに書き出して、サーバに送りなおすという手法は、そのデータの質を見極めて判断しないといけません。

一昔前に、ショッピングカートの金額情報がHTMLのhiddenで引っ張りまわされていて、1円で決済なんてことができる穴のあるeコマースサイトがあったりしました。
java初心者
ベテラン
会議室デビュー日: 2007/07/23
投稿数: 54
投稿日時: 2007-08-03 11:16
小僧様
nagise様

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

やり方をもう少し考えようと思います。
また、結果が出来次第ご報告致します。

お忙しいところ、ありがとうございました。
大ベテラン
会議室デビュー日: 2006/06/28
投稿数: 116
投稿日時: 2007-08-04 00:41
解決している?ので豆知識ってことで。

StrutsだったかStrutsが内部で使用しているCommons(のBeanUtil?忘れました……)で
ある程度簡単にMapとHTMLフォームで相互に値を渡すための仕組みを持っています。
ただ見たところそのような使い方について記述しているサイトがありませんので
まずしないのでしょうね。

具体的には、POJOリストと同じようなアクセスを行います。
リストの場合、HTMLのNAMEに角括弧[]を持つフォーム名を記述してアクセスしますが、
マップの場合、ここがキーを中に持つ丸括弧()になります。

ただし案外使いにくく、よほどMapに合った処理で無いと使おうと思えません。
私もStrutsでの開発に向け調査して知りましたが、結局使用する機会はありませんでした。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2007-08-04 03:01
引用:

ある程度簡単にMapとHTMLフォームで相互に値を渡すための仕組みを持っています。


BeanUtils#populateとdescribeメソッドでMap <-> Beanの変換はできます。
但しDateクラスなどを含むBeanでは、そのまま使うと例外がスローされるので、
そういうデータが無ければ非常に楽です。変換用のカスタムクラスを組み込め
ばスローされなくなるんですが、そこまでして使うのはいかがなものかと感じる
メソッドです。

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