- PR -

strutsで1画面(1Form)に複数Actionがある場合

1
投稿者投稿内容
未記入
会議室デビュー日: 2007/07/03
投稿数: 4
投稿日時: 2007-07-31 16:20
ある画面に複数のボタンがあり、それに対する個々のActionは別々でどれも
同じActionFormを使用するといった場合に用いる手段として
どのような形がよく使われているのでしょうか?

JavaScriptでActionパスを書き換えるというのはよく書かれていますが、
JSが許されない場合に自分が考えられるのが

DispatchAction -ボタン名で処理を分けるのはどうも・・・

LookupDispatchAction -ボタン名をResouceからみれてMappingさせてるけど
           結局はボタン名で結構強引に見えます。。。

MappingDispatchAction-これでできたらいいのですが、同じActionパス,Form,Actionで
           パラメータだけ変えてみたら一番最後の設定に上書きされてしまいました。
           
こんな感じで右往左往してるのですが、何か他に方法はあるんでしょうか?

struts 1.2.9


          
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-07-31 19:21
同じページに複数formを用意するのは無理ですか?

引用:
DispatchAction -ボタン名で処理を分けるのはどうも・・・

LookupDispatchAction -ボタン名をResouceからみれてMappingさせてるけど
           結局はボタン名で結構強引に見えます。。。

同じform内の場合、どのボタンが押されたかは、ボタンの[name]=[value]のパラメータが飛んできたかどうか
くらいしか判断のしようがないですからね。これが一般的な気がしますけどね。

引用:
MappingDispatchAction-これでできたらいいのですが、同じActionパス,Form,Actionで
           パラメータだけ変えてみたら一番最後の設定に上書きされてしまいました。

pathが同じならそうなってしまうでしょうね。
朝日奈ありす
大ベテラン
会議室デビュー日: 2007/05/02
投稿数: 189
お住まい・勤務地: 最北の地
投稿日時: 2007-07-31 23:30
1ボタン1アクションもディスパッチ系アクションも最終的には変わりありません。
大まかな部分では「外部で処理を選択する」か「内部で処理を選択するか」という違いが眼に見える違いではありますけど・・・

初期処理で共通の処理をしたい場合は executeをoverrideしてsuper.execute と共通処理を記述
することで対応はできます。

<form>を幾重にも重ねるのはブラウザにより処理が変わりそうなので怖いですよ。
未記入
会議室デビュー日: 2007/07/03
投稿数: 4
投稿日時: 2007-08-01 11:30
回答ありがとうございます。
杏さんがおっしゃるとおり初期処理等の共通処理はBaseクラスを作成して
overrideしてsuper.executeを呼ぶような仕組にしてはいるのですが、
どうしてもその画面内の項目は同じなので、したいこと(Action)は別にしたかったのですが。。。

いろいろ試してみたのですが
「画面内の項目が同じ=Formが同じ=飛ばすActionパスは同じにせざるを得ない」
という結論に達してしまうのです。

やはり[name]=[value]のパラメータが飛んできたかどうかしか判断できないのですか。。。
それならばいっそのこと、任意のパラメータを渡して、execute内でif分岐させて
しまう(各処理内容等はメソッド化するとか)のもと思ってしまいますが、
それが杏さんがいっている内部で処理を選択するっていうことになるのでしょうか。。。

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-08-01 13:40
私が言ったのはformを入れ子にするんじゃなくて並列にすることだったのですが
「画面内の項目は同じ」ということですと、現実的じゃないですね。

押下するボタンによって任意のパラメータを渡すのはできないんじゃないですかね。

例えば.NETのボタン押下イベントの仕組みも[name]=[value]のパラメータが飛んできたかで
判断しているようなのでこれが一般的なのかと思いますよ。というかこれで不都合あります?

GETになってもいいのでしたらハイパーリンクにすればいくらでも任意のパラメータわたせますけどね。
1

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