Exemple de liste jQuery et Java
Il n'existe aucun moyen direct d'itérer sur une liste Java avec jQuery, voir l'étude de cas suivante:
Contrôleur à ressort
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView getPages() {
List list = new ArrayList();
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;
}
Page JSP, vous pouvez accéder à l'objet de liste via${List}, et effectuer une itération dessus via JSTL.
somepage.jsp
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
${listValue}
Que faire si je souhaite passer directement l'objet List à jQuery?
Problème: il n'y a pas de guillemets doubles dans la liste Java
Exemple d'itération sur une liste Java avec jQuery$.each().
page html
Le script jQuert ci-dessus ne sera pas exécuté «Syncaxe non capturée: jeton inattendu»,
page html (code source)
Examinez ci-dessus le code source html, Java List n'a pas inclus les valeurs de la liste avec des guillemets doubles", donc jQuery n'a pas pu le traiter.
Solution: convertir la liste Java en JSON
La solution consiste à convertir la liste Java au format JSON avant de la transmettre à jQuery. Dans le contrôleur Spring, utilisez Jackson (ou d'autres processeurs JSON) pour convertir la liste au format JSON.
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView getPages() {
ObjectMapper mapper = new ObjectMapper();
List list = new ArrayList();
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;
}
page html
Consultez le code source html:
page html (code source)
Terminé.
Note
Pour boucler sur un tableau d'objets dans une chaîne au format JSON, vous devez le convertir en objet JavaScript (avecJSON.parse() ou$.parseJSON()) avant de l'analyser avec jQuery$.each(). Voir cet exemple -JQuery Loop Over JSON String