- PR -

LookupDispatchActionを使用してのキャンセルボタンの動き

1
投稿者投稿内容
ぴろ
会議室デビュー日: 2006/02/14
投稿数: 8
投稿日時: 2006-02-14 19:21

なれないjsp、strutsを使用して某アプリケーションを作成しております。

現在
ActionクラスをLookupDispatchActionを継承して、
formクラスをValidatorFormを継承して作っております。

このActionクラスには登録、更新、戻る(前画面に遷移)の処理がありまして、
登録、更新時にはValidateが走り、戻るのときは走らせないようにしています。
(ActionForward cancelled()でjspに作った「戻る」ボタン(<html:cancel>タグを使用)のアクションをつかんでいます)

上記の動きはできているのですが、やっかいなのが
「戻る」ボタンが押されたら「前の画面にもどりますがいいですか?」という、
ポップアップを出さなければいけない・・という仕様なのです。

これを出すようにonclickにjavascriptでconfirmを記入しているんですが
このポップアップを抜けるとValidateが走ってしまうのです。

これを走らせないようにすることは可能なのでしょうか?


ソース的には

<html:cancel onclick="return back();" >戻る</html:cancel>

<script type="text/javascript" language="JavaScript1.1">
<!--
// ポップアップ
function back() {
if (confirm("前画面に戻ります。よろしいですか?")) {
// ここにキャンセル処理を直接呼び出せる処理?
}
return false;
}
-->
</script>


こんな感じです。

質問が初心者じみていて申し訳ないのですが
どなたか解決方法をご存知の方がいらっしゃいましたら
ご教授よろしくお願いします。

ina
ベテラン
会議室デビュー日: 2005/04/14
投稿数: 58
投稿日時: 2006-02-15 03:55
inaです。
LookupDispatchAction を使ったは無いのですが、多分こんな感じで出来ると思います。
(「キャンセルボタンの時だけチェックしない」ではなく、「チェックが必要な時だけチェックする」になりますが...)

1) form の onsubmitイベント等に validate用 の関数を指定しない
2) 呼び出したいボタンのonClickイベント用にそれぞれ用の関数を記述し、その中で
  ・(必要があれば) validate用 の関数を実行 (ダメならfalseでリターン)
  ・<html:rewrite>を使って、適切な遷移先(やパラメータ)を設定して、該当フォームをサブミット




[ メッセージ編集済み 編集者: ina 編集日時 2006-02-15 03:57 ]
ぴろ
会議室デビュー日: 2006/02/14
投稿数: 8
投稿日時: 2006-02-15 10:36
inaさん、返答ありがとうございます。
inaさんのやり方でほぼ実現できました。

・・・ですが、すごい微妙なことなんですが・・

この修正方法を実現するとたしかにvalidateは制御できるのですが
こんどはvalidatorが機能しなくなってしまいます・・。

「Strutsのvalidator機能を使用すれば、クライアント(Webブラウザ)のサイドでフォームへの入力値をJavascriptを用いてチェックする事ができます。」
↑これも実現させたいのですが、これをするためには
<html:form>のonsubmit属性に
return validateXXXXForm(this)
と、設定をしなければいけないようなのです。

ただ・・自分でスクリプトチェックを書けばできるとは思うので
最悪そうしようかなあと思ってはいるんですが・・

できることなら既存?の処理を使用して作りたいのです。
もしご存知でしたらご教授よろしくお願いいたします。

ina
ベテラン
会議室デビュー日: 2005/04/14
投稿数: 58
投稿日時: 2006-02-15 16:31
引用:

「Strutsのvalidator機能を使用すれば、クライアント(Webブラウザ)のサイドでフォームへの入力値をJavascriptを用いてチェックする事ができます。」
↑これも実現させたいのですが、これをするためには
<html:form>のonsubmit属性に
return validateXXXXForm(this)
と、設定をしなければいけないようなのです。



inaです。言葉足らずだった様ですね。ごめんなさい。
前回の私の回答ですが、まさに「Strutsのvalidator機能を使う」という想定でした。
ですので、
 <html:form>のonsubmit属性に「return validateXXXXForm(this)」は書かないで、
 自作チェック関数の中から「validateXXXXForm(this※)」を呼ぶ
 ※引数のthisはチェック対象のフォームです。
としてあげれば良いです。
例)
コード:

<html:javascript formName="XXXXForm" />
<script type="text/JavaScript">
<!--
function next(form){
   //チェック前処理の実行
//Struts validatorの実行
if (!validateXXXXForm(form)){
return false;
}
//チェック後処理の実行
}
//-->
</script>

<html:form> ← onsubmit="return validateXXXXForm(this)"は記述しない。
....
<html:submit onclick="return next(this.form);"/>
</html:form>




[ メッセージ編集済み 編集者: ina 編集日時 2006-02-15 16:48 ]
ぴろ
会議室デビュー日: 2006/02/14
投稿数: 8
投稿日時: 2006-02-15 17:26
ありがとうございました。
上記の方法で実現できました。

またなにかありましたら
よろしくお願いいたします。
1

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