我知道这是一个非常愚蠢和愚蠢的问题,但我需要帮助。尝试了几个主题,但都没有。
所以我试图将在Struts2(java)中创建的List传递给javascript,以使用突出显示绘制图表。我已经阅读了几篇文章并提出了这个问题:
$(function drawList() {
var list = [
<c:forEach items="${listFromJava}" var="alistFromJava">
{itemName: "${alistFromJava.attribute}"},
</c:forEach>
];
然而它永远不会起作用,并且总是以:静态属性必须是字符串文字,指定表达式是非法的。
如果我尝试:
list = '<s:property value="listFromJava"/>
然后它只返回引用。
任何建议表示赞赏。提前谢谢。
答案 0 :(得分:5)
在谷歌搜索时避免混淆:
listFromJava
(or %{listFromJava}
") is OGNL
替换JSTL的forEach
is <s:iterator>
的Struts2标记。
您的功能可能会在纯Struts2中重写,如下所示:
$(function drawList() {
var list = [
<s:iterator value="listFromJava" >
{itemName: '<s:property escapeJavascript="true" value="attribute"/>'},
</s:iterator>
];
});
要防止最后一个元素包含未经考虑的逗号,请使用<s:if>
$(function drawList() {
var list = [
<s:iterator value="listFromJava" status="stat">
<s:if test="#stat.index>0">,</s:if>
{itemName: '<s:property escapeJavascript="true" value="attribute"/>'}
</s:iterator>
];
});
编辑:添加了防止javascript注入问题所需的转义(escapeJavascript="true"
)。