Swing/FormSubmitEvent のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/FormSubmitEvent へ行く。
- 1 (2019-01-28 (月) 16:25:16)
- 2 (2020-12-02 (水) 10:34:37)
- 3 (2023-03-09 (木) 19:02:32)
- category: swing folder: FormSubmitEvent title: JEditorPaneに表示されたフォームからの送信データを取得する tags: [JEditorPane, HTML, HTMLEditorKit] author: aterai pubdate: 2019-01-28T16:21:00+09:00 description: JEditorPaneに表示されたフォームの送信データを取得し、パーセントエンコーディングされた文字列をデコードします。 image: https://drive.google.com/uc?id=1yNsrqYvmMYj9LVvDEEoyCpo-jKwfVcylKg
概要
JEditorPane
に表示されたフォームの送信データを取得し、パーセントエンコーディングされた文字列をデコードします。
Screenshot
Advertisement
サンプルコード
JEditorPane editor = new JEditorPane();
HTMLEditorKit kit = new HTMLEditorKit();
kit.setAutoFormSubmission(false);
editor.setEditorKit(kit);
editor.setEditable(false);
String form = "<form action='#'><input type='text' name='word' value='' /></form>";
editor.setText("<html><h1>Form test</h1>" + form);
editor.addHyperlinkListener(e -> {
if (e instanceof FormSubmitEvent) {
String data = ((FormSubmitEvent) e).getData();
logger.append(data + "\n");
String charset = Charset.defaultCharset().toString();
logger.append("default charset: " + charset + "\n");
try {
String txt = URLDecoder.decode(data, charset);
logger.append(txt + "\n");
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
logger.append(ex.getMessage() + "\n");
}
}
});
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JEditorPane
に表示されたフォームの送信データをHyperlinkListener
で取得し、application/x-www-form-urlencoded
形式でパーセントエンコーディングされた文字列をデコードするテストを行っています。
HTMLEditorKit#setAutoFormSubmission(false)
でhtml
フォームの送信を自動的に処理ではなく、FormSubmitEvent
がトリガーされるように設定してHyperlinkListener
でデータを取得<form>
要素にaction='#'
のような属性の指定がない場合、NullPointerException
が発生する?- フォームの送信データは
java -Dfile.encoding=UTF-8 ...
などで指定したファイルエンコーディングに基づいてパーセントエンコーディングされている- このサンプルではファイルエンコーディングを
UTF-8
に設定しているが、日本語Windows環境のデフォルトではShift_JIS
(windows-31j
)のためその範囲外の文字は文字化けする
- このサンプルではファイルエンコーディングを
application/x-www-form-urlencoded
形式でパーセントエンコーディングされているので、半角スペースは%20
ではなく+
に符号化されている
参考リンク
- FormSubmitEvent (Java Platform SE 8)
- HTMLEditorKit#setAutoFormSubmission(boolean) (Java Platform SE 8)
- URLDecoder (Java Platform SE 8)
- Charset#defaultCharset() (Java Platform SE 8)
- java - Making HyperlinkListener Work with JeditorPane NullPointerException - Stack Overflow
- submitイベントでフォームの入力内容を取得