2012-01-31 65 views
1

這裏是我的標記,我使用jtsl核心標籤在javascript函數中通過EL訪問模型對象?

<c:forEach var="attr" items="${attributes}"> 
    <c:when test='${attr.controlType == "textField"}'> 
     <script>createTextField("${attr}");</script> 
     </c:when> 
</c:forEach> 

所以「屬性」是駐留在模型對象的列表。

我想調用createTextField函數,我想訪問該函數中的「attr」 。

這是我的功能,但我無法訪問該對象,說它是未定義的。

function createTextField(object) { 
    document.write(object.name);   
} 

任何想法?將不勝感激。

回答

4

這是行不通的。 Java和JavaScript不會在相同的環境中運行。您基本上將attr.toString()傳遞給JavaScript函數,默認情況下該函數看起來像[email protected]。 JavaScript String對象沒有name屬性。

基本上有兩種方式來得到它的工作:

  1. 您需要的Java對象,轉換爲#{attr}爲代表的這符合JavaScript對象符號(也稱爲JSON)的字符串。例如。

    <script>createTextField(${attr.asJson});</script> 
    

    喜歡的東西(用Gson幫助不大):

    public String getAsJson() { 
        return new Gson().toJson(this); 
    } 
    

    當然你也可以手動也使用StringBuilder或東西建立它。 JSON格式並不難。

  2. 只傳遞感興趣的屬性/屬性,只要它們可以表示爲String即可。例如。

    <script>createTextField("${attr.name}");</script> 
    

    function createTextField(name) { 
        document.write(name);   
    } 
    
+0

感謝,在這種情況下,選項2將無法工作,因爲我有很多的對象領域,我需要的功能,所以,我不得不使用選項一個,但我很困惑,我知道JSON是什麼,但不明白你的意思是數字1.你能請詳細解釋一下嗎? – 2012-01-31 19:36:24

+0

什麼部分完全不瞭解?選項1只是告訴你,你應該將Java對象轉換爲JSON,這樣你就可以輕鬆地將它打印爲有效的JS函數參數。 – BalusC 2012-01-31 19:46:39

+0

如何將該對象轉換爲JSON,然後如何從該JS功能中提取該JSON的值 – 2012-01-31 19:49:15