- - PR -
複数のhtml:submitで、どのボタンが押されたか判断したい
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 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 よろしくお願いいたします。 | ||||
|
投稿日時: 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 | ||||
|
投稿日時: 2004-03-24 07:41
つーか押されたボタンの名前が渡ってきます。
| ||||
|
投稿日時: 2004-03-24 10:19
インギさん
Anthyhimeさん、ありがとうございます。 ソースを読んで勉強してみます。 また詰まったら、ご教示お願いいたします。 -----Anthyhimeさん------ >押されたボタンの名前が渡ってきます とのことですが、 DispatchAction のソースを読んでいるところなのですが、 これとは別の意味なのでしょうか? もしそうでしたら、渡ってきたボタンの取得の仕方を教えて頂く事はできないでしょうか? DispatchAction のソースを読めばわかることでしたら、失礼な質問かと思います。 先にお詫びします。 | ||||
|
投稿日時: 2004-03-24 10:51
先にお詫びする前に、なぜ先にソースを読まないのか。 | ||||
|
投稿日時: 2004-03-24 12:03
永井です。あまり前向きなお話ではないですが……
まず、始めに。 基本的にコンピュータは「お馬鹿」です。もうちょっと正確に言うと、融通が利きません。無論、ご承知のことと思いますが。 そのコンピュータが「DispatchActionを継承したクラス」を使って判断出来るということは、その辺りにそれをするための決まりきった手続き(マニュアル)が記述されているということです。 それを読んでみるというのが方法の一つです、既に色々な方が仰っていますが。 また、「一つのフォーム内に複数のSubmitボタンを配置して、どのボタンが押されたかを判別したい」という要求自体もさほど突飛なものではありません。Webでその辺りを検索してみれば、FAQですからこれもぽこぽこと引っ掛かります。 JSPが出力したHTMLソースを見て、複数のSubmitボタンを判別する方法を読んで……で、考えてみましょう。 HTML自体の癖ですとか、HTTPのお話ですとかをもう少し勉強なさった方がいいかも知れません。現場では色々とテクニカルな方法が飛び交っていたり、早急に結果を出すことを求められることも多く苦労なさっているかとは思いますが、急がば回れ、泥臭い(とは言っても、HTTP自体結構上層の方でしょうが)部分を学ばれるのも地味ですが価値あることだと思います。 あと、これも余談なんですが、 「それ以外の方法で判断させたいのです」 と言われましても、何故それ(DispatchActionを継承したクラス)が使えない(使いたくない)のか、そういった背景に関して何も書かれていませんので、多分、JAVAQさんが求められているような回答をズバリ得られる確率はかなり低いと思われます。 #別スレッドで色々と「質問の仕方」ですとかに関して議論が行われていたりしますので、その辺りもまたお時間のあるときに目を通されておくといいかも知れません。 ##ちょっと成長し過ぎていて、読むのも大変ですが | ||||
|
投稿日時: 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 ] | ||||
|
投稿日時: 2004-03-24 23:28
みなさん、色々とありがとうございます。
まだソース読めていないんですが、永井和彦さんのおっしゃるとおり、急がば回れでがんばってみたいと思います。 ただ、今回のアドバイスでどこを見ればいいのかというヒントがわかりましたので、大変助かっています。 あとは、理解ですね。 それから、「それ以外の方法で判断させたい」ですが、簡単にいいますと、 ・自家製のvalidateチェックを行いたい ・validateチェックは、項目単位で行われる。 だが、押されたsubmitボタンで、チェックを行ったり、行わなかったりと validateチェックの処理を分けたい。 表現がしにくいのですが、以上のようなことをしたかったのです。 | ||||
1
