2012-01-11 103 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