Thymeleaf+SpringにてGoogle Mapを使用する。&利用時にSAXExceptionが発生しないように注意する。
「Spring MVCのサンプルプロジェクトでViewの描画をthymeleafテンプレートエンジンによるものに変更する」からの発展形。
・WEB-INF/templates配下にhtmlを1つ追加する。
ここで1つ注意することがある。
Google Mapを利用するにあたって、"http://maps.google.com/maps/api/js?v=3&sensor=false"をscriptタグのsrc属性に指定するが、クエリパラメータを指定する際のアンパサンドは実体参照(&)で記述しないとSAXExceptionが発生する。
<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-spring3-3.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Tweet表示画面</title> <style type="text/css"> html { height: 100% } body { height: 100%; margin: 0px; padding: 0px } #map { height: 100% } </style> <script src="http://maps.google.com/maps/api/js?v=3&sensor=false" type="text/javascript" charset="UTF-8"></script> <script type="text/javascript"> var map; // 初期化。 function init() { // Google Mapで利用する初期設定用の変数 var latlng = new google.maps.LatLng(39, 138); var opts = { zoom : 6, mapTypeId : google.maps.MapTypeId.ROADMAP, //通常の地図 center : latlng //地図の場所 }; // 1.Mapを作成 map = new google.maps.Map(document.getElementById("map"), opts); // Markerの初期設定 var markerOpts = null; var marker = null; var latitude = 35.668175; var longitude = 139.699032; var markerPosition = new google.maps.LatLng(latitude, longitude); markerOpts = { position : markerPosition, map : map, title : "marker" }; // 2.直前で作成したMarkerOptionsを利用してMarkerを作成 marker = new google.maps.Marker(markerOpts); //吹き出しを作成 var contentString = 'Shibuya js!'; var infowindow = new google.maps.InfoWindow({ content: contentString //吹き出し内コメント }); //3.マウスをかざしたときに吹き出しがオープンするイベントを定義 google.maps.event.addListener(marker, 'mouseover', function() { infowindow.open(map,marker); }); //4.マウスを取り除いたときに吹き出しがクローズするイベントを定義 google.maps.event.addListener(marker, 'mouseout', function() { infowindow.close(map,marker); }); } </script> </head> <body onload="init()"> <div id="map"></div> </body> </html>
・コントローラにmappingを1つ追加する。
@RequestMapping(value = "/displayTweet", method = RequestMethod.GET) public String displayTweet(Locale locale, Model model) { logger.info("called get Tweet Logic."); return "displayTweet"; }