Struts html标记在<script> </script>中

时间:2013-10-01 03:34:08

标签: javascript html jsp struts2 ognl

我知道这是一个非常愚蠢和愚蠢的问题,但我需要帮助。尝试了几个主题,但都没有。

所以我试图将在Struts2(java)中创建的List传递给javascript,以使用突出显示绘制图表。我已经阅读了几篇文章并提出了这个问题:

$(function drawList() {
var list = [
<c:forEach items="${listFromJava}" var="alistFromJava">
{itemName: "${alistFromJava.attribute}"},
</c:forEach>
];

然而它永远不会起作用,并且总是以:静态属性必须是字符串文字,指定表达式是非法的。

如果我尝试:

list = '<s:property value="listFromJava"/>

然后它只返回引用。

任何建议表示赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:5)

在谷歌搜索时避免混淆:

<c:forEach is JSTL

${listFromJava} is EL

<s:property is STRUTS2 UI TAG

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")。