質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

3回答

8923閲覧

Java(Spring)でFileDialogをモーダル(ブラウザの前面)表示させたいです

programmer010

総合スコア14

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2017/06/15 02:16

編集2017/06/16 08:14

下記のソースで、Controllerでjava.awt.FileDialogを作成し表示させているのですが、モーダル(ブラウザの前面)表示させることができません。

JavaScriptでファイル保存ダイアログを表示させる方法についても考えてみたのですが、Controllerでファイル保存処理をさせたいためにjava.awt.FileDialogを使用しようと思いました。

下記のソースでダイアログ自体は表示されるのですが、Frameをブラウザの前面に出すことができないので、どうしてもダイアログがブラウザの裏に隠れてしまい、見た目的に画面がずっとロード中のような感じになってしまいますので、何とかならないかと思い質問させていただきました。

いろいろ調べておりますが、解決策が見つからず困っております。
もしおわかりの方がおられましたら、ご教授いただけると幸いです。

何卒、よろしくお願い申し上げます。

<環境>
言語:Java
フレームワーク:Spring
IDE:Eclipse

###ソースコード

JavaScript

1function submitForm(command) { 2 var form = document.forms[0]; 3 form.target="_self"; 4 if (form.command != null) { 5 form.command.value = command; 6 } 7 form.submit(); 8}

■JSP

Java

1<a href="javascript:submitForm('save')">保存</a>

■Controller

Java

1@RequestMapping(method = {RequestMethod.POST}, 2 params = "command=save") 3public void saveAction(@ModelAttribute @Valid saveForm form, 4 BindingResult result, Model model, 5 HttpServletRequest request) { 6 FileDialog f_dialog = new FileDialog(new Frame(), 7 "保存先を指定", 8 FileDialog.SAVE); 9 f_dialog.setVisible(true); 10}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

「java.awt.FileDialog」はクライアントPC上で動くGUIを作成するためのAPIなわけですが。

提示されているソースはJSPなどサーバサイドの話をされているように思われます。

ブラウザに対してモーダルなファイルダイアログを表示するなら

html

1<input type='file' name='saveFileName' />

こんなのを使うのも手ではないですかね。

投稿2017/06/15 02:26

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

programmer010

2017/06/15 03:05

早速のご回答ありがとうございます。 「java.awt.FileDialog」はそもそもサーバサイドは使用できないということなんですね。 ちなみに、教えていただいたコードですとファイルの選択ダイアログが表示されるようで、表示したいのはファイルの保存ダイアログです。 いろいろ調べてみた限り、htmlでファイルの保存ダイアログが表示できそうになかったので、「java.awt.FileDialog」を使用しようと思った次第です。
programmer010

2017/06/15 06:01

度々ありがとうございます。 教えていただいたサイトを参考に試してみたところ、ファイルの保存はできるのですが、やりたいことはファイルの保存ダイアログでファイル名を入力していただき、ファイルの保存処理自体はControllerで行いたいと考えております。 そのようなことができるかご存知でしたら、教えていただけると幸いです。
tkturbo

2017/06/15 06:04

Controller自体はサーバサイドの処理であり、「ローカルPC上にファイルを保存する」というクライアントサイドの処理を実行するのは無理ではないかと。
programmer010

2017/06/15 06:09

何度もすみません。 いろいろ教えていただく限り、根本的に無理なのですね。 何かしら方法があればと思ったのですが。。
guest

0

ファイルをダウンロードさせる際に表示されるダイアログボックスは、ブラウザの設定に依存します。
サーバ側では今のところ制御できません。

投稿2017/07/02 01:39

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

programmer010

2017/07/03 00:26

ご回答ありがとうございます。 やはりサーバ側では制御できないのですね。 いろいろと考えた結果、ファイル保存部分はtkturbo様教えていただいたページを参考にして、ファイルの内容はControllerで作成しそのデータをFormのプロパティを介してJSPに渡し、そのデータをJavaScriptでファイルにする方法にしました。
guest

0

ファイルダウンロード処理自体はResponseEntityを返せばできますが・・・・

java

1 @RequestMapping(value = "/testdownload") 2 public final ResponseEntity<byte[]> testdownload(HttpServletRequest req, 3 HttpServletResponse res) throws UnsupportedEncodingException { 4 HttpHeaders h = new HttpHeaders(); 5 h.add("Content-Type", "text/csv; charset=UTF-8"); 6 h.setContentDispositionFormData("filename", "hoge.csv"); 7 return new ResponseEntity<>("あ,い,う,え,お".getBytes("UTF-8"), h, HttpStatus.OK); 8 }

tkturbo様のおっしゃるとおりファイル保存のダイアログはクライアント側(ブラウザ)の機能なのでサーバー側で確実に呼び出すことは(私の知る限り)できないです。
もっと言えばJavascriptを使ってもダイアログを確実に出す方法は存在しないはずです。
(100%できないというソースが見当たらず申し訳ないですが・・・経験上。
ブラウザの拡張機能を利用すればあるいは・・・)

たとえばGoogle Chromeには以下のような設定があります。
イメージ説明

上記コードを実装してhttp://~~/testdownloadにアクセスするとCSVがダウンロードできますが、この際保存ダイアログがでるかどうかはこの設定に引きずられます。

投稿2017/06/15 11:15

koronatail

総合スコア433

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

programmer010

2017/06/15 11:48

ご丁寧な回答ありがとうございます。 やはりサーバー側でファイル保存のダイアログを出すことは無理なようですね。 しかもJavascriptを使っても無理なんですね。。 質問に記載したコードでダイアログは出るのですが、Frameをブラウザの前面に出すことができないので、どうしてもダイアログがブラウザの裏に隠れてしまい、見た目的に画面がずっとロード中のような感じになってしまいますので、何とかならないかと思ったのですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問