- - PR -
ストラッツ:been:defineで取得したMapをhtml:hiddenにセットする方法
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-08-01 12:01
nagise様
ご回答ありがとうございます。 sessionを使用するしか方法はないようなのですね…。 sessionは使用できないので、 submitからactionに飛んだ際に、再度Mapを取得する方法に しようかと思います。(Mapの値はDBから取得しているので処理が重くなりそうですが…) お忙しいところ、ありがとうございました。 | ||||
|
投稿日時: 2007-08-01 12:54
いや、そういうわけではないですよ。Mapの中身を取り出して、hiddenに設定 すればできないわけでは無いが、Mapを丸ごと設定できるような楽な方式は、 Strutsでは用意されていないということです。 Map -> シリアライズ -> デコード(Base64など) をすればできないことはないです。XMLシリアライザーをを使う方法もある でしょうし。ただし、通信量が増えるだけであまりメリットは無いかもしれませんが。 [ メッセージ編集済み 編集者: 小僧 編集日時 2007-08-01 12:56 ] | ||||
|
投稿日時: 2007-08-01 13:09
補足しておくと、一旦HTMLにしてブラウザに渡された情報というのは、信用できないんですね。
かなり簡単にユーザによって書き換えることができてしまう。 HTMLに書き出して、サーバに送りなおすという手法は、そのデータの質を見極めて判断しないといけません。 一昔前に、ショッピングカートの金額情報がHTMLのhiddenで引っ張りまわされていて、1円で決済なんてことができる穴のあるeコマースサイトがあったりしました。 | ||||
|
投稿日時: 2007-08-03 11:16
小僧様
nagise様 ご回答ありがとうございました。 やり方をもう少し考えようと思います。 また、結果が出来次第ご報告致します。 お忙しいところ、ありがとうございました。 | ||||
|
投稿日時: 2007-08-04 00:41
解決している?ので豆知識ってことで。
StrutsだったかStrutsが内部で使用しているCommons(のBeanUtil?忘れました……)で ある程度簡単にMapとHTMLフォームで相互に値を渡すための仕組みを持っています。 ただ見たところそのような使い方について記述しているサイトがありませんので まずしないのでしょうね。 具体的には、POJOリストと同じようなアクセスを行います。 リストの場合、HTMLのNAMEに角括弧[]を持つフォーム名を記述してアクセスしますが、 マップの場合、ここがキーを中に持つ丸括弧()になります。 ただし案外使いにくく、よほどMapに合った処理で無いと使おうと思えません。 私もStrutsでの開発に向け調査して知りましたが、結局使用する機会はありませんでした。 | ||||
|
投稿日時: 2007-08-04 03:01
BeanUtils#populateとdescribeメソッドでMap <-> Beanの変換はできます。 但しDateクラスなどを含むBeanでは、そのまま使うと例外がスローされるので、 そういうデータが無ければ非常に楽です。変換用のカスタムクラスを組み込め ばスローされなくなるんですが、そこまでして使うのはいかがなものかと感じる メソッドです。 |