【JSP×Ajax】フォームの内容をsubmitせずに非同期通信(Ajax)したいときの処理

2019年1月18日Java, jQuery

JSPでフォームを送信した結果、Java(Servlet)側でエラーが起きても画面遷移をしないで(フォームの入力内容を保持したまま)メッセージやらを出力したいときの処理です。

バリデーションプラグインとかを入れてると、submitしたときに画面遷移するのを阻止してバルーンを出してくれるんですが、バリデーションをすり抜けてServlet側でDBアクセスや形式チェックでエラーになると、画面遷移してしまいます。

こりゃいかんということで、ServletでのDBアクセスも画面遷移しないようにします。

HTML

jQuery

Java

$(‘form’).serialize()でform要素の中にある入力部品を「name=value」という書式で文字列に変換してくれます。
複数の要素があった場合は「name1=value1&name2=value2…」とつながっていきます。

つまり、これをURLパラメータとして送ってあげると、submitせずともsubmitしたときと同様のパラメータをServletに送れます。わあい。

AjaxとServletとの値の受け渡しはJson形式で行ってます。
PrintWiterでJson文字列を出力してからserviceメソッドをreturnすると、あら不思議、画面遷移せずにJavaの処理で作成した値が受け取れます。

JSPとAjaxを組み合わせるの、使い方次第ではかなり便利に使えそうです。

2019/2/21 サンプルソースがしょぼすぎたので改定しました。