我有一组用户定义的对象,它们是从servlet传递到JSP的。现在,我需要在JSP的script标记内访问此数组。我该怎么做?

现在,我在script标记中包含以下内容:

var dCount = '${chart}';

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


当我这样做时,我得到的输出是未定义的。我认为这是因为${chart}返回一个对象?如果是这样,如何将其转换为用户定义的类?还是这里有其他问题?

谢谢。

最佳答案

您需要认识到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);
}


现在,您需要确保以正确生成此有效HTML / JS代码的方式编写JSP代码(可以通过右键单击和在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};

10-05 21:07
查看更多