如何在JSP?</script>中访问<script>中的用户定义对象数组

时间:2013-11-20 09:59:08

标签: javascript jsp

我有一组用户定义的对象,我从servlet传递给JSP。现在,我需要在JSP中的脚本标记内访问此数组。我该怎么做?

目前,我在脚本标记中有以下内容:

var dCount = '${chart}';

var index;
   for(index=0; index<dCount.length;index++){
        alert(dCount);
    }

当我这样做时,我将输出视为未定义。我假设这是因为${chart}返回一个对象?如果是这样,我该如何将其转换为用户定义的类?或者这是其他问题吗?

感谢。

2 个答案:

答案 0 :(得分:0)

Java脚本在客户端执行,el在服务器端进行评估。我认为您可以在java脚本中向服务器发出ajax请求,并且可以将用户列表作为字符串返回,因为在java脚本中只能使用字符串和没有任何其他数据类型。

答案 1 :(得分:0)

您需要意识到JSP基本上是一个HTML代码生成器,而CSS / JS是生成的HTML输出的一部分。您需要以生成有效HTML / JS代码的方式编写JSP代码。一个包含3个对象的有效JS数组,每个属性foobar都是这样的:

var chart = [{
    foo: "foo1",
    bar: "bar1"
},{
    foo: "foo2",
    bar: "bar2"
},{
    foo: "foo3",
    bar: "bar3"
}];

var index;
for(index = 0; index < chart.length; index++) {
    var item = chart[index];
    alert(item.foo + ", " + item.bar);
}

现在,您需要确保以这样的方式编写JSP代码,以便生成完全这个有效的HTML / JS代码(正如您可以通过右键单击并查看源代码验证在webbrowser中。

如果${chart}List<Item>Item[],最简单的方法之一是使用<c:forEach>循环遍历它,打印所需的JS代码输出:

var chart = [<c:forEach items="${chart}" var="item" varStatus="loop">
    { foo: "${item.foo}", bar: "${item.bar}" }${loop.last ? '' : ','}
</c:forEach>];

以最简单的形式,它应该可以正常工作。但是,一旦您将“特殊字符”作为属性值(例如"或甚至换行符),就会出现问题。你需要逃脱它。更好的是使用现有的JSON library,例如Google Gson,以便将复杂的Java对象(例如List<Item>Item[])转换为有效的JSON字符串。例如。如下在servlet中:

List<Item> chart = createItSomehow();
request.setAttribute("chart", new Gson().toJson(chart));
// ...

然后你可以这样做:

var chart = ${chart};