- PR -

複数のhtml:submitで、どのボタンが押されたか判断したい

1
投稿者投稿内容
JAVAQ
会議室デビュー日: 2004/03/23
投稿数: 7
投稿日時: 2004-03-23 19:24
こんにちは。 どなたか教えて頂けますでしょうか?

jspで、複数のhtml:submitボタンを用意しています。
どのボタンが押されたかを、HttpServletRequestから取得すること
はできないでしょうか?
(DispatchActionを継承したクラスで、どのボタンが押されたかという判断はできます。
ですが、それ以外の方法で判断させたいのです。)



*****<jsp>******
<html:submit property="action"><bean:message key="button.insert"/>
</html:submit>
<html:submit property="action"><bean:message key="button.search"/>
</html:submit>

*****<リソースバンドル>*******
# -- buttons --
button.insert=INSERT
button.search=SEARCH

*****<ボタン判断クラス>**********
public class FormValidate
public static boolean validateTelNo
    (Object bean,
ValidatorAction val, Field field, ActionErrors errors, HttpServletRequest request) {

request.getParameterMap();
  //insertボタンなら行う処理(コード省略)
   //searchボタンなら行う処理(コード省略)
   //共通の処理
※DispatchActionを使うと、別々のメソッドとなります。
 ひとつのメソッド内で、押されたボタンによる処理を行いたいんです。 
}
}
----------------------------------------------------------------------
上記で、insertボタンを押すと、request.getParameterMap()の中身が(eclipceデバッグモードにて確認)HashMapの[13]番目のvalueの値が、リソースバンドルの"INSERT"となっていました。
もちろん、searchでもvalueの値は"SEARCH"となります。
ここの、value値の取得できないものでしょうか?

<以下、eclipceデバッグモードにて確認した内容>
"request.getParameterMap()"= ParameterMap (ID=156)
entrySet= HashMap$EntrySet (ID=165)
keySet= null
loadFactor= 0.75
locked= true
modCount= 5
size= 3
table= HashMap$Entry[16] (ID=162)
[0]= HashMap$Entry (ID=172)
[1]= null
[2]= null
[3]= null
[4]= null
[5]= null
[6]= null
[7]= null
[8]= null
[9]= null
[10]= null
[11]= null
[12]= HashMap$Entry (ID=173)
[13]= HashMap$Entry (ID=174)
hash= 257394589
key= "action"
next= null
value= String[1] (ID=190) ←←ここの値が、[INSERT]
[14]= null
[15]= null
threshold= 16
values= null

よろしくお願いいたします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-03-23 23:57
>(DispatchActionを継承したクラスで、どのボタンが押されたかという判断はできます。
>ですが、それ以外の方法で判断させたいのです。)
ということをご存知ならば DispatchAction のソースを読んでみてはいかがでしょうか?
大変シンプルですよ。

http://cvs.apache.org/viewcvs.cgi/jakarta-struts/src/share/org/apache/struts/actions/DispatchAction.java?rev=1.25&view=markup
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2004-03-24 07:41
つーか押されたボタンの名前が渡ってきます。
JAVAQ
会議室デビュー日: 2004/03/23
投稿数: 7
投稿日時: 2004-03-24 10:19
インギさん
Anthyhimeさん、ありがとうございます。

ソースを読んで勉強してみます。 また詰まったら、ご教示お願いいたします。

-----Anthyhimeさん------
>押されたボタンの名前が渡ってきます

とのことですが、 DispatchAction のソースを読んでいるところなのですが、
これとは別の意味なのでしょうか?

もしそうでしたら、渡ってきたボタンの取得の仕方を教えて頂く事はできないでしょうか?
DispatchAction のソースを読めばわかることでしたら、失礼な質問かと思います。
先にお詫びします。
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2004-03-24 10:51
引用:

JAVAQさんの書き込み (2004-03-24 10:19) より:
-----Anthyhimeさん------
>押されたボタンの名前が渡ってきます

とのことですが、 DispatchAction のソースを読んでいるところなのですが、
これとは別の意味なのでしょうか?

もしそうでしたら、渡ってきたボタンの取得の仕方を教えて頂く事はできないでしょうか?
DispatchAction のソースを読めばわかることでしたら、失礼な質問かと思います。
先にお詫びします。



先にお詫びする前に、なぜ先にソースを読まないのか。
永井和彦
ぬし
会議室デビュー日: 2002/07/03
投稿数: 276
お住まい・勤務地: 東京都
投稿日時: 2004-03-24 12:03
永井です。あまり前向きなお話ではないですが……

引用:

jspで、複数のhtml:submitボタンを用意しています。
どのボタンが押されたかを、HttpServletRequestから取得すること
はできないでしょうか?
(DispatchActionを継承したクラスで、どのボタンが押されたかという判断はできます。
ですが、それ以外の方法で判断させたいのです。)



まず、始めに。

基本的にコンピュータは「お馬鹿」です。もうちょっと正確に言うと、融通が利きません。無論、ご承知のことと思いますが。
そのコンピュータが「DispatchActionを継承したクラス」を使って判断出来るということは、その辺りにそれをするための決まりきった手続き(マニュアル)が記述されているということです。
それを読んでみるというのが方法の一つです、既に色々な方が仰っていますが。

また、「一つのフォーム内に複数のSubmitボタンを配置して、どのボタンが押されたかを判別したい」という要求自体もさほど突飛なものではありません。Webでその辺りを検索してみれば、FAQですからこれもぽこぽこと引っ掛かります。
JSPが出力したHTMLソースを見て、複数のSubmitボタンを判別する方法を読んで……で、考えてみましょう。

HTML自体の癖ですとか、HTTPのお話ですとかをもう少し勉強なさった方がいいかも知れません。現場では色々とテクニカルな方法が飛び交っていたり、早急に結果を出すことを求められることも多く苦労なさっているかとは思いますが、急がば回れ、泥臭い(とは言っても、HTTP自体結構上層の方でしょうが)部分を学ばれるのも地味ですが価値あることだと思います。

あと、これも余談なんですが、
「それ以外の方法で判断させたいのです」
と言われましても、何故それ(DispatchActionを継承したクラス)が使えない(使いたくない)のか、そういった背景に関して何も書かれていませんので、多分、JAVAQさんが求められているような回答をズバリ得られる確率はかなり低いと思われます。
#別スレッドで色々と「質問の仕方」ですとかに関して議論が行われていたりしますので、その辺りもまたお時間のあるときに目を通されておくといいかも知れません。
##ちょっと成長し過ぎていて、読むのも大変ですが

しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2004-03-24 14:19
<html><body>
<form method=get>
<input type=submit name=A value=AButton>
<input type=submit name=B value=BButton>
</form>
</body></html>

とりあえずこのへんの知識から確認するのがいいかも。

[ メッセージ編集済み 編集者: しょむ 編集日時 2004-03-24 14:22 ]
JAVAQ
会議室デビュー日: 2004/03/23
投稿数: 7
投稿日時: 2004-03-24 23:28
みなさん、色々とありがとうございます。
まだソース読めていないんですが、永井和彦さんのおっしゃるとおり、急がば回れでがんばってみたいと思います。 ただ、今回のアドバイスでどこを見ればいいのかというヒントがわかりましたので、大変助かっています。 あとは、理解ですね。

それから、「それ以外の方法で判断させたい」ですが、簡単にいいますと、

・自家製のvalidateチェックを行いたい
・validateチェックは、項目単位で行われる。
 だが、押されたsubmitボタンで、チェックを行ったり、行わなかったりと
 validateチェックの処理を分けたい。

表現がしにくいのですが、以上のようなことをしたかったのです。 
1

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