• ベストアンサー

Javaプログラムからポップアップを表示する方法

現在、Javaプログラムにおいて以下のような ことを実施したいと考えています。 1。画面上(JSP)からSQLで使用する条件を選び、ボタンをクリック 1.JavaからDBにアクセスし、検索結果件数を取得 2.件数をポップアップで表示し、「はい」もしくは「いいえ」を選択することで、処理を続行させるかさせないかを決定 1及び2については問題なく行えるのですが、3のやり方がよくわかりません。 DBの検索結果が仮に3件だとすると、ポップアップで 「3件が選択されました。処理を続行しますか」というメッセージとともに 「はい」、「いいえ」ボタンを表示させます。 ここで表示するポップアップは、できればJavaScriptで行いたいのですが可能なのでしょうか。 もしJavaScriptでなくても、とにかくポップアップが表示できるようにしたいと考えています。 大変恐縮ですが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • osumitan
  • ベストアンサー率33% (102/307)
回答No.2

補足の方も読ませて頂きました。 > ここで私の不明点として、1つめが(2)から(3)への遷移になります。 > つまり、Javaプログラム本体からJavaScriptを呼び出すこと。 厳密に言うと、JavaからJavascriptを「呼び出す」ことはできません。 JavaおよびJSPは、ブラウザからのHTTPリクエストに対して 応答としてHTML(含Javascript)を「返す」ことしかできません。 そのHTMLを表示してJavscriptを実行するのは、ブラウザの役目です。 syu1219_aさんがおっしゃる「JavaがJavascriptを呼ぶ」というのは おそらく、Javaが応答を返して自動的にconfirmのダイアログが出て 「はい」か「いいえ」の確認をユーザに促す、ということなのかと 想像します。 それであれば、Javascriptの「onLoad」イベントが使えます。 onLoadイベントは、ブラウザが読み込み終わると発生しますが、 それを<body>タグにつければ、ページ読み込み完了時に イベントが発生し、希望のfunctionを呼び出すことができます。 以下のようにすれば、ページ表示と同時に確認を行えます。 ---------- <html> : <body onLoad="kakunin()"> : </body> </html> <script language="Javascript"> <!-- : function kakunin() {   var msg = "検索結果は";   msg += "<bean:write property="kensakuKekka"/>";   msg += "です。\n処理を実行しますか?";   if(confirm(msg) == true) {     :   }   else {     :   }   : } : //--> </script> ---------- > そして、2つめが(3)から(4)への遷移になります。 > つまり、JavaScriptで選択された結果をJavaプログラムに返すこと。 ブラウザ側からJavaの方へ情報を伝えるには、 入力された値にしろ、押したボタンにしろ、何にしても <form>に情報を持たせてsubmitで送信するしかありません。 情報を何らかの形でsubmitに載せることになります。 「確認でどちらを選択したか」というプロパティを新たに設ければ Java側で受け取ることができます。 <input type="hidden">を使い、submitに載せるといいでしょう。 ---------- <html> : <form method="post" action="hogehoge"> : <input type="hidden" name="sentaku"> : </form> : </html> <script language="Javascript"> <!-- : function kakunin() {   var f = document.forms[0];   var msg = "検索結果は";   msg += "<bean:write property="kensakuKekka"/>";   msg += "です。\n処理を実行しますか?";   f.elements["sentaku"].value = confirm(msg);   f.submit(); } : //--> </script> ---------- あとは、form.actionを書き換えることによって ちがうActionを呼ぶということもできるでしょう。

syu1219_a
質問者

お礼

osumitanさん、ご回答ありがとうございます。 教わったやり方で実現させたいと思います。 本当にありがとうございました。

その他の回答 (2)

回答No.3

>i = (SQLを元にDBに検索を行い、結果件数をintで返す関数);  ・・・(d) struts 使ってるのならこの i の値をActionFormBeanに入れてJSPにひき渡します。 >java側でiをJavaScriptへ受け渡し、ユーザが選択を行う。   ・・・(e) #2の方も言われているようにJavaからJavascriptを直接呼び出すことはできません。Javaモジュールはサーバ側で動作しているのに対して、javascriptはクライアント側で動作しているからです。 なので(d)で処理結果をアクションフォームビーンに入れて 処理をJSPに戻します。(ActionFowardを返す。) 要するにここで画面の再描画が入ります。 再描画すると同時に「件数」を表示します。 ボクも#2さんのように <body onLoad="">使うと思います。 ポップアップウインドウが表示され、「はい」が選択されたら そこでsubmit() してやればいいです。

syu1219_a
質問者

お礼

osumitanさん、補足のご意見ありがとうございます。 参考にさせて頂きます。 ありがとうございました。

回答No.1

function nantoka() {  if(window.confirm("<%= selcount %>件が選択されました。続行しますか?")) {   // ここで続行する処理JSPもしくはサーブレットを呼び出す  } } って感じではいかがでしょうか?

syu1219_a
質問者

補足

ご回答ありがとうございます。 確かに、そのJavaScriptを利用することで実現できそうですが、 私の考えている方法は以下の通りなのです。 ちなみに、フレームワークとしてStrutsを利用しています。 JSP(SQLの条件を選択後、ボタン押下)→(1) Javaプログラム(DBへのアクセス、結果の取得)→(2) JavaScript(ポップアップの表示)→(3) javaプログラム(続行するしないによる画面遷移の決定)→(4) ここで私の不明点として、1つめが(2)から(3)への遷移になります。 つまり、Javaプログラム本体からJavaScriptを呼び出すこと。 イメージとしては以下になります。 StringBuffer sql; // 条件を元に作成されたSQLを格納 ・・・(a) int i; //検索結果件数を格納            ・・・(b) sql.append("条件"); // 繰り返し行い、条件を追加していく・・・(c) i = (SQLを元にDBに検索を行い、結果件数をintで返す関数);  ・・・(d) java側でiをJavaScriptへ受け渡し、ユーザが選択を行う。   ・・・(e) そして、2つめが(3)から(4)への遷移になります。 つまり、JavaScriptで選択された結果をJavaプログラムに返すこと。 イメージとしては以下になります。 javaプログラムで(e)の返り値を取得 ・・・(f) 画面遷移を決定          ・・・(g) 以上になります。 (e)と(f)のやり方が良く分かりませんので、よろしくお願い致します。

関連するQ&A