2013-10-01 111 views
1

我知道这是一个很noob和愚蠢的问题,但我需要帮助。尝试了几个主题,没有一个工作。Struts html标签里面<script>

所以我想通过在Struts2(java)中创建的列表转换为javascript来使用突出显示绘制图表。我读过几篇文章,并提出了这一点:

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

但是它永远不会奏效,始终与结束:静态属性必须是一个字符串,其非法指定的表达式。

如果我尝试:

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

那么它只返回参考。

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

回答

3

为了避免混淆,而谷歌搜索:

<c:forEach is JSTL

${listFromJava} is EL

<s:property is STRUTS2 UI TAG

listFromJava (or %{listFromJava}") is OGNL

Struts2的标签替换JSTL的forEachis <s:iterator>

你的函数可以在纯Struts2的改写这样的:

$(function drawList() { 
    var list = [ 
     <s:iterator value="listFromJava" > 
      {itemName: '<s:property escapeJavascript="true" value="attribute"/>'}, 
     </s:iterator> 
    ]; 
}); 

为了防止最后一个元素有一个undesidered逗号,使用<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")。

+0

@ downvoter-stalker:让我开心的事情是,对于每次downvote你提出一个我的问题,你会失去一个重点。继续,你真是好笑:) –

+0

谢谢@Andrea Ligios,不过idk为什么struts UI标签似乎不可读。我最终得到这样的东西: var length =(''); 它的工作原理,但问题是我必须通过硬编码获取列表中的每个元素,如: var aValue =('') 我试过这个: var aValue [i] =('') 但没有运气。任何想法? 再一次,非常感谢您的回应。 – user1509803

+0

1)SO编辑器和Eclipse JSP编辑器不够先进,无法正确解释和着色OGNL语法:它*看起来*错了,但它绝对是正确的; –