我正在使用struts 2和velocity模板来生成JSON响应。 现在捕捉是响应不是使用一些速度JSON插件生成 它只是一个字符串,一旦速度完成与它的解析和呈现 响应,并在客户端我做eval以获得响应字符串转换为JSON。将速度响应转换为JSON
我真正需要的是velocity或struts方面的一些解决方案,一旦结果是由velocity生成的 ,框架应该调用我的API,我可以使用我自己的逻辑将vm文件的响应输出转换为JSON 。如何做到这一点?
例如:
- 在浏览器中使用JavaScript我设计了一个树部件,我使用的树状结构显示评论。
- 说用户点击评论按钮。
- 我的用户界面小部件将触发一个AJAX来获取评论数据。
- 该请求被STRUTS 2框架拦截。
- 它会调用,例如,
getComments()
动作API,并将填充一个arrayList与评论对象说cmt。 - 现在响应由速度模板(* .vm)处理。这样
现在VM我写代码:
{ "CommentsData" : [ #set($sep="") #foreach($c in $cmt) $sep { "commentText" : $c.getText() } #set($sep=",") #end }
现在最终的反应可能会是这样:
{ "CommentsData" : [ { "commentText" : "This is comment 1" }, { "commentText" : "This is comment 2" }, { "commentText" : "This is comment 3" }, { "commentText" : "This is comment 4" }` ] }
现在,这可能看起来像JSON,但它不是严格的JSON;我的意思是如果我错过 某些
,
然后在客户端在JavaScript我的评估可能会失败或JSON.parse()
将失败,但速度模板我现在已经知道如果JSON格式不正确。因此,一旦生成上面的速度模板,我需要一些控制,在那里我可以写一些Java代码来对响应进行一些验证。
我看到我的方法使用velocity模板来生成JSON输出(actully一个看起来像JSON的字符串)可能是错误的。但是我仍然需要处理我写的每个速度模板的响应。
如果您要输出JSON,则不需要模板(速度)。也许你使用的速度与我不同,但我没有看到模板如何在输出json时有用。你正在做的事情的一个例子将澄清 – 2012-01-11 07:04:29
对我来说很困惑。你用VM.as做什么这是一些温和的事情Engine.a完整的用户案例帮助你得到一些输入 – 2012-01-11 07:16:27
这是一个坏模板的用法,它是混淆易出错的代码。你不需要它来创建JSON。只需使用JSON库生成输出 – 2012-01-11 08:46:21