2014-01-13 30 views
4

我有一個JSP文件,其中包含用於從模型中的數據填充JavaScript數組的代碼。該JSP如下所示:在JSP中,NetBeans報告語法錯誤,但結果看起來很好,並且工作正常

data.addRows([ 
    <c:forEach items="${AuditsByTime}" var="row"> 
     [new Date(${row.key})<c:forEach items="${row.value}" var="c">,${c}</c:forEach>], 
    </c:forEach> 
]); 


的NetBeans最終]);報告語法錯誤(所有3個下劃線),並且報告錯誤:

"Expected ; but found ]".

數據本身是在形式Map<Long, int[]> Java的。

如果我取下內的forEach

data.addRows([ 
    <c:forEach items="${AuditsByTime}" var="row"> 
     [new Date(${row.key})], 
    </c:forEach> 
]); 

那麼它不再報告錯誤。在這兩種情況下,雖然頁面都生成了,並且外觀和功能都很完美。

我發現這個:http://forums.netbeans.org/topic54289.html但它似乎在討論一個不同的問題,因爲在這種情況下,我確實在文件中指定了錯誤位置。

這裏有一個微妙的問題,我錯過了,或者我只是混淆了NetBeans分析器?我能做些簡單的事情來刪除錯誤報告嗎?

如果我的代碼被破壞了,我會修復它,如果它是NetBeans解析器,那麼我會將它報告爲一個錯誤。

回答

1

看起來你只是簡單地解釋瞭解析器。

這就是說,生成的JS將在數組末尾包含一個懸掛逗號。您應該考慮使用JSTL fn:join而不是forEach循環。像下面的未經測試的代碼實際上,可能爲你工作(注:也有當row.value是空的懸掛逗號問題)

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 
//... 
data.addRows([ 
    <c:forEach items="${AuditsByTime}" var="row"> 
     [new Date(${row.key}),${fn:join(row.value,',')}], 
    </c:forEach> 
]); 
+0

很好的解決方案,遺憾的是FN:加入似乎只接受字符串,而我的數組有一個整數數組(除非我誤解了錯誤)。在java中構建數據結構時,我可以從它們創建字符串,但效率很低。 'javax.el.E​​LException:java.lang.IllegalArgumentException:不能轉換[I @ 6ecdb2d2的類[我到類[Ljava.lang.String;' –

+0

]這是正確的,簽名是一個字符串數組'''它不能與Integer對象一起使用。幸運的是,這裏有一個實現將提供這種功能。 http://stackoverflow.com/questions/296398/concatenate-strings-in-jsp-el – disrvptor

+0

答案似乎有些過時,我不得不用一種非常不同的方式編寫標記庫:http://stackoverflow.com/questions/296398/concatenate-strings-in-jsp-el/21184534#21184534它解決了這個問題,雖然:) –

相關問題