jQueryを使用してJavaリストを反復処理する直接的な方法はありません。次のケーススタディを参照してください。
スプリングコントローラ
@RequestMapping(value = "/", method = RequestMethod.GET) public ModelAndView getPages() { List<String> list = new ArrayList<String>(); list.add("List A"); list.add("List B"); list.add("List C"); list.add("List D"); list.add("List E"); ModelAndView model = new ModelAndView("somepage"); model.addObject("list", list); return model; }
JSPページでは、 `$ {List} ‘を介してリストオブジェクトにアクセスし、JSTLを介してそれを反復処理することができます。
somepage.jsp
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <c:forEach var="listValue" items="${list}"> <li>${listValue}</li> </c:forEach>
ListオブジェクトをjQueryに直接渡したいのですが?
問題:Javaのリストに二重引用符はありません.
jQuery `$ .each()`を使ってJavaリストを反復する例
htmlページ
<script> $(document).ready(function() { var list = ${list}; $.each(list, function( index, value ) { alert( index + ": " + value ); }); }); </script>
上記のjQueryスクリプトは実行されません “Uncaught SyntaxError:
予期しないトークン ”
htmlページ(ソースコード)
<script> $(document).ready(function() { var list =[List A, List B, List C, List D, List E]; $.each(list, function( index, value ) { alert( index + ": " + value ); }); }); </script>
上記のhtmlソースコードを確認すると、Java Listはリストの値を二重引用符で囲まなかったので、 “jQueryは処理できません。
解決策:JavaのリストをJSONに変換する
このソリューションは、jQueryに渡す前にJava ListをJSON形式に変換します。 Springコントローラでは、Jackson(または他のJSONプロセッサ)を使用してListをJSON形式に変換します。
@RequestMapping(value = "/", method = RequestMethod.GET) public ModelAndView getPages() { ObjectMapper mapper = new ObjectMapper(); List<String> list = new ArrayList<String>(); list.add("List A"); list.add("List B"); list.add("List C"); list.add("List D"); list.add("List E"); ModelAndView model = new ModelAndView("somepage"); String json = ""; try { json = mapper.writeValueAsString(list); } catch (Exception e) { e.printStackTrace(); } model.addObject("list", json); return model; }
htmlページ
<script> $(document).ready(function() { var list = ${list}; $.each(list, function( index, value ) { alert( index + ": " + value ); }); }); </script>
HTMLソースコードを確認する:
htmlページ(ソースコード)
<script> $(document).ready(function() { var list =["List A","List B","List C","List D","List E"]; $.each(list, function( index, value ) { alert( index + ": " + value ); }); }); </script>
完了しました。
参考文献
-
link://jquery/jquery-loop-over-json-string-each-example/[JQueryループ
JSON文字列を超えて – $。各例]。
jQuery $ each()の例
-
リンク://spring-mvc/spring-mvc-and-list-example/[Spring MVCとリスト
例]。
Wikipedia:JSON
-
http://jackson.codehaus.org/
[Jackson – 高性能JSON
プロセッサ。]