JEditorPaneに表示されたフォームからの送信データを取得する
Total: 2195
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
JEditorPane
に表示されたフォームの送信データを取得し、パーセントエンコーディングされた文字列をデコードします。
Screenshot
![Swing/FormSubmitEvent screenshot](https://ateraimemo.com/swing/formsubmitevent/screenshot.png)
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イベントでフォームの入力内容を取得