こんにちは、kkです。
今回はAjaxを利用して、画面遷移なしでサーバからデータを取得して画面に表示してみたいと思います。
前回作成したSpringMVCのサンプルプロジェクトをベースにします。
→SpringIDEで始めるSpringMVCプロジェクト
Ajaxについては今回jQueryを利用するため、ライブラリをプロジェクトに追加しておきます。
Jacksonライブラリの追加
サーバからのデータ返却にJSONを使用するため、Jacksonライブラリを利用します。
Mavenに下記を追加。
- pom.xml
[sourcecode] <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.4.4</version> </dependency> [/sourcecode]
すると、関連するライブラリも一緒に引っ張ってきてくれます。
サーバ側の処理
デフォルトで作成されているコントローラに、下記メソッドを追加します。
配列のデータを返す単純なものです。
- HomeController.java
[sourcecode language="java"]
/**
* テストデータの配列を返却する。
*/
@RequestMapping(value = "getTestData", method = RequestMethod.GET)
@ResponseBody
public String[] getTestData() {
logger.info("call getTestData");
String[] datas = {"test1", "test2", "test3"};
return datas;
}
[/sourcecode]Springの機能により、メソッドにResponseBodyアノテーション(5行目)を付けることで、リクエスト結果をJSON形式で返却することが出来ます。
画面(JSP)側の処理
ボタンクリック時にリクエストを送信してデータを取得します。
urlにはコントローラのリクエストマッピングと合うようにパスを記載します。
成功時に、取得したデータをhtmlに出力しています。
- home.jsp(javascript部分)
[sourcecode language="javascript"]
<script type="text/javascript">
$(function() {
// Ajax通信テスト ボタンクリック
$("#ajax_btn").click(function() {
// outputDataを空に初期化
$("#output_data").text("");
$.ajax({
type : "GET",
url : "getTestData",
dataType : "json",
success : function(data) {
success(data);
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
error(XMLHttpRequest, textStatus, errorThrown);
}
});
});
});
// Ajax通信成功時処理
function success(data) {
alert("success:" + data);
$("#output_data").text("");
for (var cnt = 0; cnt < data.length; cnt++) {
$("#output_data").append("data[" + cnt + "]:" + data[cnt] + ";");
}
}
// Ajax通信失敗時処理
function error(XMLHttpRequest, textStatus, errorThrown) {
alert("error:" + XMLHttpRequest);
alert("status:" + textStatus);
alert("errorThrown:" + errorThrown);
}
</script>
[/sourcecode]- home.jsp(html部分)
[sourcecode language="html"]
<body>
<h1>
Hello world!
</h1>
<P> The time on the server is ${serverTime}. </P>
<div id="ajax_data">
<input type="button" id="ajax_btn" value="Ajax通信テスト" /><br />
outputData:<span id="output_data"></span>
</div>
</body>
</html>
[/sourcecode]実行してみる
まずはページにアクセス。
現在時刻が表示されます。

次にボタンクリックでリクエスト送信。
サーバからデータを取得してhtmlへ表示します。
時刻を見ると、変わっていない(=画面遷移していない)ことが分かります。

如何でしたでしょう。
単純なものなら結構簡単に実現出来たと思います。

