JavaFxからサーバーにリクエストを送信する方法です。
csvをサーバーにアップロードするサンプルコードを作成しました。
基礎知識/javaFx - Swingとの違い(fxmlを使わない場合)
・画面作成する分には基本的には似たような実装ができます。
・SwingではアクションIDを設定しアクションリスナでIDごとの振り分けを行う必要
がありますが、
javaFxならsetOnActionメソッドで処理を記述できます。
・Swingにはダイアログを表示するUtilがあるがjavaFxにはなかったのですが、
javaFX 8u40から追加されました。
なのでSwingのアクション周りが書きやすくなったという感じでしょうか。
基礎知識/javaFx - fxmlとは
・xmlのタグ形式でGUIを作成することができます。
・javaでいちいちボタンなどの部品を作っていくより個人的には楽です。
・fxmlがViewになりXXXControlerがControlerになるのでうごきがわかりやすい。
fxmlを使うことで格段にGUIが書きやすくなります。
処理の流れ
window上に"csv選択"と表記されるボタンを設置しています。
onAction="#csvChoose"と定義しているのでこのボタンが押下されるとコントローラ
(FxmlWindowControl.java)のcsvChooseメソッドが呼ばれます。
<Button onAction="#csvChoose"
text="csv選択" prefWidth="45.0"
AnchorPane.topAnchor="85.0"
AnchorPane.leftAnchor="10.0" />
csvChooseメソッド内ではまずwindow上にファイルチューザを表示します。
Button button = (Button) event.getTarget();
Window window = button.getScene().getWindow();
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Open Resource File");
fileChooser.getExtensionFilters().addAll(
new ExtensionFilter("Comma-Separated Values Files",
"*.csv"));
ユーザがファイルを選択するとファイルデータをFormDataMultiPartに格納します。
File selectedFile;
selectedFile = fileChooser.showOpenDialog(window);
MultiPart multipart = new FormDataMultiPart();
multipart.bodyPart(new FileDataBodyPart("file", selectedFile,
MediaType.APPLICATION_OCTET_STREAM_TYPE));
そしてサーバーに送信!
Client client = ClientBuilder.newClient();
client.register(MultiPartFeature.class);
client.target("http://localhost:8080/api/csv/upload").request().post(Entity.
entity(multipart, MediaType.MULTIPART_FORM_DATA_TYPE));
まとめ
ソースは
https://github.com/seki-seki/sample-javaFxにあります。
サーバー編は次回記述します。