0

我正面临 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 文件中的对象数组?

4

1 回答 1

0

您需要记住,JSP 输出是在 JS 中解释的,就像您自己键入一样。因此,您的线路:

var clients = ${model.arrClients};

如果内容${model.arrClients}是可以的,["foo", "bar"]但不会是这样的foo, bar。使用 Javascript 调试工具(Firebug、Chrome 控制台等)查看控制台错误日志,并查看页面中该行的实际 HTML 输出。

第二个console.info()没有出现的事实表明您的 JSTL 表达式导致了 JS 语法错误。

编辑:正如 gigadot 指出的那样,您不能使用 List 或数组之类的 Java 对象并在 JSP 中声明它——您只会得到toString()表示,这通常不是您想要的。您需要对<c:forEach>块使用类似的代码并将每个元素添加到您的 JS 数组中,一次一个(例如使用.push())。

于 2012-09-13T00:14:10.523 回答