我面临 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 变量中。
如果我尝试访问其他数组(字符串),它是有效的,并且我在控制台中看到了消息。
$(function() {
var clientNames = ${model.clientsNames};
console.info('it Works!!');
}
但是当我尝试访问另一个数组时
$(function() {
var clients = ${model.arrClients};
console.info('it Works!!');
}
我无法访问该数组,我什至无法获取控制台消息。 有谁知道如何使用 jQuery 访问 JSP 文件中的对象数组?
您需要记住,JSP 输出在 JS 中被解释,就像您自己输入一样。因此你的路线:
var clients = ${model.arrClients};
如果 ${model.arrClients}
的内容是
["foo", "bar"]
的话就可以了,但是如果是
foo, bar
之类的东西就不行了。使用 Javascript 调试工具(Firebug、Chrome 控制台等)查看控制台错误日志,并查看页面中该行的实际 HTML 输出。
第二个
console.info()
没有出现,表明你的JSTL表达式导致了JS语法错误。
编辑:正如 gigadot 指出的那样,你不能采用像列表或数组这样的 Java 对象并在 JSP 中声明它 - 你只会得到
toString()
表示,这通常不是你想要的。您需要使用类似的代码和 <c:forEach>
块,并将每个元素添加到 JS 数组中,一次一个(例如使用 .push()
)。