- PR -

html:cancelを2個定義した場合の判別方法について

投稿者投稿内容
もも屋
会議室デビュー日: 2005/05/25
投稿数: 14
投稿日時: 2005-07-25 16:01
もも屋です。

題記の件についてお尋ねします。

Struts1.1を使用して開発を行っているのですが、1枚のjspにhtml:cancelタグが2個あった場合、アクション側でどちらのキャンセルボタンが押されたか判断することは可能なのでしょうか。
別のボタン(実行など)のValidateを回避しながら1つのフォームでできるか試みているのですが…、なかなか難しいです。

どなたかご存知の方がいらっしゃったら教えて頂きたく。
宜しくお願いします。
ぬべたそ
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 72
投稿日時: 2005-07-27 16:37
こんにちは。

ちょっと今のままでは回答しづらいので、こちらから質問をさせて下さい。

cancelボタンが2つあるということですが、submitボタンは無いのですか?
また、2つのキャンセルボタンで同じフォームを共有すると言うことでしょうか?

実装したい内容をもう少し詳しく書いていただけると、良い方法が分かるかもしれません。
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2005-07-28 08:59
引用:

もも屋さんの書き込み (2005-07-25 16:01) より:
Struts1.1を使用して開発を行っているのですが、1枚のjspにhtml:cancelタグが2個あった場合、アクション側でどちらのキャンセルボタンが押されたか判断することは可能なのでしょうか。
別のボタン(実行など)のValidateを回避しながら1つのフォームでできるか試みているのですが…、なかなか難しいです。
願いします。



onClick で、どちらのキャンセルが押されたかの情報(ボタンID等)を別の hidden に
セットする、というのでどうでしょう?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-07-28 12:28
キャンセルボタンといっても、Struts上の概念であって、
実際にレンダリングされるHTMLはSUBMITボタンになります。

通常のブラウザはSUBMITボタンをクリックした場合、
ボタンオブジェクト名=ラベルという形式でパラメータが作成されます。
キャンセルボタンの場合、名前がStrutsで予約されている固定の名前になり、
値はタグなどで囲んだ値になります。

キャンセルボタンを複数配置した場合、どれをクリックしても同じキーが送信されますが、
値は表示しているボタンのラベルが送信されるため、
アクションクラスでキャンセルボタンのキーの値でリクエストパラメータを参照して
どのキャンセルボタンがクリックされたかを判定することができます。

もも屋
会議室デビュー日: 2005/05/25
投稿数: 14
投稿日時: 2005-07-28 19:05
返答が遅れてしまい申し訳ありません。

---------------------
ぬべたそ様

>cancelボタンが2つあるということですが、submitボタンは無いのですか?
>また、2つのキャンセルボタンで同じフォームを共有すると言うことでしょうか?
ええ。
submitボタンも複数ある画面です。
基本的には1つのフォームで処理を行おうと考えています。複数フォームであれば実現できるのですが…。

>実装したい内容をもう少し詳しく書いていただけると、良い方法が分かるかもしれません。
すみません。少し大まかに書きすぎました。
わかりずらくて申し訳ありませんでした。

---------------------
ふーばー様

>onClick で、どちらのキャンセルが押されたかの情報(ボタンID等)を別の hidden に
>セットする、というのでどうでしょう?
確かに妙案ですね。(ってか気付かなかったのが恥ずかしいです
hidden使用すればできますね。


---------------------
かつのり様

>アクションクラスでキャンセルボタンのキーの値でリクエストパラメータを参照して
>どのキャンセルボタンがクリックされたかを判定することができます。
<html:cancel>てすと1</html:cancel>
<html:cancel>てすと2</html:cancel>
↑のような感じでjspに書いた場合、実際にはリクエストのどの部分を参照すればわかるのでしょうか。 eclipse使ってデバッグしながらリクエストを見てたのですが、「てすと1」「てすと2」という値が見つけられず、、、。
値を保持している場所を教えて頂けませんか。宜しくお願いします。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-07-28 19:58
org.apache.struts.action.CANCELというキーに
「てすと1」または「てすと2」が結び付けられると思います。

org.apache.struts.action.CANCELは、
org.apache.struts.GlobalsクラスのCANCEL_KEYというフィールドです。

実際にどういうリクエストが送信されるかは
レンダリングされたHTMLを見るのが一番早いと思いますよ。
もも屋
会議室デビュー日: 2005/05/25
投稿数: 14
投稿日時: 2005-08-01 11:10
毎度お世話になってます。もも屋です。

引用:

かつのりさんの書き込み (2005-07-28 19:58) より:
org.apache.struts.action.CANCELというキーに
「てすと1」または「てすと2」が結び付けられると思います。

org.apache.struts.action.CANCELは、
org.apache.struts.GlobalsクラスのCANCEL_KEYというフィールドです。

実際にどういうリクエストが送信されるかは
レンダリングされたHTMLを見るのが一番早いと思いますよ。




上記について確認しようとやってみたのですが、方法がわからず…。
org.apache.struts.GlobalsクラスのCANCEL_KEYってfinalで定義された固定値ですよね。そうすると、html:cancelで送信される値もどのcancelボタン押しても同じになるんじゃないかと、、、。
見当違いな事言ってたらごめんなさい。

もう少し詳しく教えて頂けないでしょうか。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-08-01 12:43
ごめんなさい。リクエストパラメータとして送信されるのは、
org.apache.struts.taglib.html.ConstantsのCANCEL_KEYですね。

で、値ではなく名前で指定されるので、
<input type="submit" name="org.apache.struts.taglib.html.CANCEL" value="てすと1">
<input type="submit" name="org.apache.struts.taglib.html.CANCEL" value="てすと2">
という感じのHTMLが生成されるはずです。

HTMLのSubmitボタンの仕様は押されたボタンの内容だけが送信されます。
[てすと1]ボタンをクリックしたら、
org.apache.struts.taglib.html.CANCEL=てすと1
と送信されます。

なので、
コード:
String cancel = HttpServletRequest#getParameter(org.apache.struts.taglib.html.Constants.CANCEL_KEY);


これで、てすと1/てすと2/nullのいずれかが取得できます。

生成されたHTMLの見方は、ブラウザで右クリックして「ソースの表示」を選択します。
フォームタグを見れば、どんな名前に対してどんな値が送信されるかわかると思います。
Actionクラス側で、その名前でパラメータが送信されているのかを見れば
正しく送信されているかを調べることができると思いますよ。

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