2013-10-01 154 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語法:它*看起來*錯了,但它絕對是正確的; –