• ベストアンサー

showModalDialog()による新規ウィンドウ回避方法

struts + jspで開発を行っています。 showModalDialog()を使用し、子画面で行った事を親画面に反映させるといった開発を行っています。ですが、子画面でsubmit処理を行うと新規ウィンドウとして開かれてしまいます。何か回避方法をご存知の方いらっしゃいませんでしょうか?よろしくお願い致します。

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

  • ベストアンサー
  • BigBoin
  • ベストアンサー率36% (4/11)
回答No.2

既にある画面に名前を付け、それをターゲット指定すればshowModalDialogでも新規ウィンドウが開かれない事を確認しました。 しかしself.window.close();で子画面を閉じないといけないのでリクエストが完全に送られる前に画面が閉じてサーバー側に行かない可能性も出てきます。

kumon
質問者

お礼

先程に続きまして返答ありがとうございます。 BigBoinさんの回答通り変更を実施した所、新規ウィンドウが開かれる事なくsubmitする事が出来ました。ありがとうございます(^^) たびかさなる質問で申し訳ございませんが、回答にある問題点の他に、予測される問題等ございますでしょうか?

その他の回答 (3)

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.4

サーバに何らかのデータ通信を行う必要があるんですね。 そうでしたら、XmlHttpRequestを使ってバックグラウンドで通信させてあげるといいかと思います(いわゆるAjaxです) これならNo.2の『リクエストが完全に送られる前に画面が閉じてサーバー側に行かない』という 現象も回避できますし、サーバから取得したデータを使ってダイアログの表示を書き換えることもできます。 少々敷居が高いですが、経験しておいて損はないと思います。 詳しいサンプルコードなどは"ajax"か"XmlHttpRequest"で検索するとたくさん出てきます。そちらを参考にしてください。

kumon
質問者

お礼

返答ありがとうございます。 なるほど!参考になります(^^)バックグラウンドお処理試してみます。

回答No.3

kumonさん、こんにちは。 私はフレームを使って画面遷移できるようにしています。 私も画面遷移(サブミット)したら新しいウィンドウが開いたり、リンクをクリックしたら新しいウィンドウが開いたり・・・ といったことで困っていました。 参考サイトを忘れてしまいましたが、 フレームを用いるとページ遷移も行えます。 ・親.html ・子.html ・フレーム.html の三つを用意します。 親から子を開くときには子をURLに指定するのではなく、 フレーム.htmlを指定します。 そしてフレーム.htmlの中でフレームを使って 子.htmlを呼び出してあげます。 (フレームのwidthとheightを100%にすることでパッと見ではフレームを使っていることに気づきません) titleが必要なときはフレーム側でtitleを設定してあげないと表示されません。 あとは、子ウィンドウでリクエストを飛ばし、データの登録を行い、 親ウィンドウをリロードしてあげれば 登録したデータが反映されると思います。 その後で子ウィンドウを閉じます。 具体的なソースではなく、流れだけですがいかがでしょうか。

kumon
質問者

お礼

papillon68さんこんばんは! 返答ありがとうございます。 フレームを使用する場合は回答の通り実施するんですね!勉強になります。BigBoinさんの回答で変更してしまいましたので、今度papillon68さんの回答でやってみようと思います。

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.1

submitはせずwindow.returnValueに親ウィンドウに渡したい値を セットしてからwindow.close()で閉じれば大丈夫だと思うのですが、 どうでしょうか?

kumon
質問者

お礼

返答ありがとうございます。 どうしてもsubmitを行わなわないといけないんです・・・申し訳ございません。

関連するQ&A