您需要認識到JSP基本上是一個HTML代碼生成器,並且CSS/JS是生成的HTML輸出的一部分。您需要以生成有效的HTML/JS代碼的方式編寫JSP代碼。 3個對象,每個屬性foo
和bar
看起來像這樣的一個有效的JS數組:
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代碼(可以通過在瀏覽器中右鍵單擊和查看源代碼進行驗證)。
只要${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};
嗯,但如果我轉換對象成JSON字符串數組,我怎麼會調用該對象的距離的方法腳本?例如,我需要調用一個方法,如:dCount.getCount();或dCount.getName()。 – drunkenfist
正如我的答案中所示,通過'item.count','item.name'等等通常的JS對象方式。 – BalusC
感謝BalusC,工作就像一個魅力。我只需要添加var chart = JSON.parse('$ {chart}'); – drunkenfist