我有一组用户定义的对象,它们是从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数组,每个对象的属性foo
和bar
如下所示:
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};