2012-01-11 105 views
2

我正在使用struts 2和velocity模板來生成JSON響應。 現在捕捉是響應不是使用一些速度JSON插件生成 它只是一個字符串,一旦速度完成與它的解析和呈現 響應,並在客戶端我做eval以獲得響應字符串轉換爲JSON。將速度響應轉換爲JSON

我真正需要的是velocity或struts方面的一些解決方案,一旦結果是由velocity生成的 ,框架應該調用我的API,我可以使用我自己的邏輯將vm文件的響應輸出轉換爲JSON 。如何做到這一點?

例如:

  1. 在瀏覽器中使用JavaScript我設計了一個樹部件,我使用的樹狀結構顯示評論。
  2. 說用戶點擊評論按鈕。
  3. 我的用戶界面小部件將觸發一個AJAX來獲取評論數據。
  4. 該請求被STRUTS 2框架攔截。
  5. 它會調用,例如,getComments()動作API,並將填充一個arrayList與評論對象說cmt。
  6. 現在響應由速度模板(* .vm)處理。這樣
  7. 現在VM我寫代碼:

    { "CommentsData" : [ 
    
        #set($sep="") 
        #foreach($c in $cmt) 
        $sep 
        { 
         "commentText" : $c.getText() 
        } 
        #set($sep=",") 
        #end 
    
    } 
    
  8. 現在最終的反應可能會是這樣:

    { "CommentsData" : [ 
    
        { 
         "commentText" : "This is comment 1" 
        }, 
        { 
         "commentText" : "This is comment 2" 
        }, 
        { 
         "commentText" : "This is comment 3" 
        }, 
        { 
         "commentText" : "This is comment 4" 
        }` 
    
        ] 
    } 
    
  9. 現在,這可能看起來像JSON,但它不是嚴格的JSON;我的意思是如果我錯過 某些,然後在客戶端在JavaScript我的評估可能會失敗或JSON.parse() 將失敗,但速度模板我現在已經知道如果JSON格式不正確。

  10. 因此,一旦生成上面的速度模板,我需要一些控制,在那裏我可以寫一些Java代碼來對響應進行一些驗證。

我看到我的方法使用velocity模板來生成JSON輸出(actully一個看起來像JSON的字符串)可能是錯誤的。但是我仍然需要處理我寫的每個速度模板的響應。

+0

如果您要輸出JSON,則不需要模板(速度)。也許你使用的速度與我不同,但我沒有看到模板如何在輸出json時有用。你正在做的事情的一個例子將澄清 – 2012-01-11 07:04:29

+0

對我來說很困惑。你用VM.as做什麼這是一些溫和的事情Engine.a完整的用戶案例幫助你得到一些輸入 – 2012-01-11 07:16:27

+0

這是一個壞模板的用法,它是混淆易出錯的代碼。你不需要它來創建JSON。只需使用JSON庫生成輸出 – 2012-01-11 08:46:21

回答

1

不知道你是如何使用速度。輸出JSON時我們不使用速度;我們只需創建一個JSON可轉換對象並使用response.write(jsonObject.toJson())直接從控制器輸出它。這樣,總是生成適當的JSON。

+0

感謝您的快速回復傢伙, – jsDebugger 2012-01-11 10:31:02