- PR -

アクションクラスでポップアップウィンドウ表示

1
投稿者投稿内容
すひろ
大ベテラン
会議室デビュー日: 2006/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 2006-12-12 21:48
Eclipseを使ったWebアプリケーションに関する質問です。

<html:submit property="submit" value="削除"
 onclick="return confirm('削除しますか?')"/>

現在、JavaScriptを使ってポップアップウィンドウを表示しているのですが、
これをアクションクラスで入力チェック
(画面のテキストフォームに入力された文字列の妥当性検査)を
行った後にウィンドウを表示させるように変更したいと思っています。

アクションクラス内で”ウィンドウを表示する”という内容の
コードを記述することになると思うのですが、
その場合でも同様にJavaScriptを使えるのでしょうか?
それとも、何か他の方法でウィンドウを表示させることができるのでしょうか。

アドバイスよろしくお願いします。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-12-12 22:14
普通にリクエストをsubmitして検証後のレスポンスHTMLでconfirm()するか、
Ajax的な実装にするかのどちらかでしょう。検証を全部JavaScriptで実装して
しまった方が楽かもしれません。

引用:

未記入さんの書き込み (2006-12-12 21:48) より:
アクションクラス内で”ウィンドウを表示する”という内容の
コードを記述することになると思うのですが、
その場合でも同様にJavaScriptを使えるのでしょうか?



どこのフレームワークのアクションか書いていないのでわかりませんが、
アクションクラスとJavaScriptのウィンドウ表示は何の関係もないと思います。
大ベテラン
会議室デビュー日: 2006/06/28
投稿数: 116
投稿日時: 2006-12-13 00:35
出来ないことはないです。
レスポンスに画面用のHTMLを記述することで可能です。

しかしながら後々の保守のことを考えると、このような方法を用いて
遷移を伴う処理を行うのはやめておいた方が良いかもしれません。
処理の遷移がアクションクラス内に隠されてしまうため、
作成した人間しかわからないというような状況に陥りかねません。
また、処理が複雑になるとアクションクラスのソースが汚くなってしまいます。

validationを使用することは出来ない場面なのでしょうか?
どうしても別画面に一旦遷移する必要があるなら、あしゅさんの発言にある
「検証後のレスポンスHTMLでconfirm()」が容易ではないかと思います。
すひろ
大ベテラン
会議室デビュー日: 2006/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 2006-12-13 19:39
すみません、説明が不足していました。
 1.「削除しますか?」のポップアップウィンドウ表示。OKの場合のみ処理続行
 2.テキストフォームで入力された会員IDのフォーマットが適切かチェックし、エラーなら処理中断
 3.会員IDをキーにDB内の該当データを削除
 4.次画面に削除結果を表示
現在はこのような手順ですが、この1番と2番を逆にしたいのです。
次画面表示用のレスポンスHTMLでconfirm()を表示 では
業務ロジックが実行されてしまうため、申しわけありませんが解決しないのです。

なお、作業環境はStruts1.2、Tomcat5.0になります。
よろしくお願いします。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-12-13 21:19
引用:

未記入さんの書き込み (2006-12-13 19:39) より:
次画面表示用のレスポンスHTMLでconfirm()を表示 では
業務ロジックが実行されてしまうため、申しわけありませんが解決しないのです。


もともとそのつもりで回答しているのですが。。
次の画面にforwardせずにinputにforwardするActionを作りましょう。
大ベテラン
会議室デビュー日: 2006/06/28
投稿数: 116
投稿日時: 2006-12-14 01:27
先のレスに記述しましたレスポンスに画面用のHTMLを記述して処理する方法ですが、
StrutsのアクションクラスもServletなので同じことが出来るということです。
なお簡単に出来ると思ったのですが、Strutsで用意されたトークンの仕組みを
利用している場合にこれで画面遷移してしまうと、常にトークンが不正に
なるような気がします。
(トークン用のパラメタキーをレスポンス出力のHTMLへ設定すればいけそうですが、
そこまでして実現するのが正しいかどうかは個々人の判断ということで。)

confirmにこだわらず考えてみてはどうでしょうか?
たとえば削除実行ボタンや戻るボタンを持った、削除内容の表示画面に遷移するなど。
(削除件数が少なそうなのでこちらも良いのではないでしょうか。)
すひろ
大ベテラン
会議室デビュー日: 2006/10/17
投稿数: 124
お住まい・勤務地: 愛知県
投稿日時: 2006-12-15 19:49
返信ありがとうございます。
引用:

あしゅさんの書き込み (2006-12-13 21:19) より:
次の画面にforwardせずにinputにforwardするActionを作りましょう。


”inputにforwardする”というのがイマイチわかっていないのですが、
input=現在の画面ということでしょうか。

引用:

暁さんの書き込み (2006-12-14 01:27) より:
confirmにこだわらず考えてみてはどうでしょうか?
たとえば削除実行ボタンや戻るボタンを持った、削除内容の表示画面に遷移するなど。
(削除件数が少なそうなのでこちらも良いのではないでしょうか。)


confirm()は使わない方向でいるのですが、画面の数は現状のままにしたいと考えています。
なので、やはりアクションクラスの起動〜終了の間にポップアップを表示させたいです。

せっかくアドバイスして下さっているのに、こんなコメントで申しわけありません。
Ajaxというものもよく分かっていないので、もう一度自分で調べてみます。
大ベテラン
会議室デビュー日: 2006/06/28
投稿数: 116
投稿日時: 2006-12-15 23:38
引用:
Ajaxというものもよく分かっていないので、もう一度自分で調べてみます。


了解です。Ajax習得は血肉になってくれるでしょう。がんばってください。

1点注意ですが、
引用:
アクションクラスの起動〜終了の間にポップアップを表示させたい


この要望はHTTPの仕組みでは無理だったかと思います。少なくともStrutsのみでは無理です。
ポップアップを表示させるためにはレスポンスをクライアントへ返す必要があるためで、
これがStrutsフレームワークの使用法で言えばアクション用メソッドからのリターンに当るためです。

似た事を行いたい方が過去にこちらで質問なさっています。
Ajaxを使用する場合は方向性が変わるのですが、それ以外ではこのページでの回答のような手しかありません。
先に書きましたアクション内でレスポンスにHTMLを書き出すと言う手も、
結局この回答のようなHTMLを書くというだけのことです。

[編集]
馬鹿なこと書いてました。
---
遷移したように見せたくないなら、見えないようにしたフレーム(または内部フレーム)に対し遷移する手もあります。
---
って書いてたんですが、これじゃエラーのとき戻れないですね……
何か変なこと書いたと気になってたが……この時間帯に書き込むことになろうとは。
[/編集]

[ メッセージ編集済み 編集者: 暁 編集日時 2006-12-16 01:45 ]
1

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