我遇到了JSP和Spring的问题,我试图将模型中的对象数组传递给视图(JSP)。
这是我在控制器部分的代码:
@RequestMapping(value = "/clientes.html")
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
Map<String, Object> myModel = new HashMap<String, Object>();
myModel.put("arrClients", this.clientManager.getClients());
myModel.put("clientNames", this.clientManager.getNames());
return new ModelAndView("clients", "model", myModel);
}
在JSP文件中,我可以使用jstl访问“arrClients”,即:
<c:forEach items="${model.arrClients}" var="client">
<div id="newClient">
<p>
<c:out value="${client.name}" />
<i><c:out value="${client.surname}" /></i>
</p>
</div>
</c:forEach>
这段代码正在运行,但是我想访问这个数组,将它存储在jQuery var中。
如果我尝试访问其他数组(字符串),它可以工作,我在控制台中有消息。
$(function() {
var clientNames = ${model.clientsNames};
console.info('it Works!!');
}
但是当我尝试访问其他数组时
$(function() {
var clients = ${model.arrClients};
console.info('it Works!!');
}
我无法访问此数组,我甚至无法获取控制台消息。 有谁知道如何使用jQuery访问JSP文件中的对象数组?
答案 0 :(得分:0)
您需要记住,在JS中解释JSP输出就像您自己键入它一样。因此你的行:
var clients = ${model.arrClients};
如果${model.arrClients}
的内容是["foo", "bar"]
,那么就可以了,但不会是foo, bar
。使用Javascript调试工具(Firebug,Chrome控制台等)查看控制台错误日志,并查看该行页面中的实际HTML输出。
第二个console.info()
未出现的事实表明您的JSTL表达式导致了JS语法错误。
编辑:正如gigadot指出的那样,你不能把像Java一样的Java对象并在JSP中声明它 - 你只需要获得toString()
表示,这通常不是你想要的。您需要使用带有<c:forEach>
块的类似代码,并将每个元素一次添加到JS数组中(例如使用.push()
)。