velocity 实现将 java List Array POJO对象转成 JSON 字符串.md

原创
2017/06/21 17:45
阅读数 3.8K

近期需要实现一个小 Case 二级联动列表

在进入页面的时候已经初始化一级列表 二级列表需要根据一级的内容变化而展示不同列表 那么可以在一级列表的 option 里面存储 对应的二级列表要展示的数据 放在 data-** 或者 任意非内置属性中 这个属性值应该在模板渲染后就存储进去,故需要将对应的 java 的 list or array 对象转成 String 存进去。 下边的模板宏方法可以实现上面的需求

    #macro(VelListToJSON $list )
        #set($myList = $list )
        {##
        #foreach($key in $myList.keySet())
            "$key": ##
            #set($x = $myList.get($key)) ##
            #VelToJSON($x)
            #if(($foreach.count) < $myList.keySet().size())
                ,##
            #end
        #end
        }##
    #end

    #macro(VelArrayToJSON $arr)
        #set($myArr = $arr)
        [##
        #foreach($x in $myArr)
            #VelToJSON($x) ##
            #if($foreach.count < $myArr.size())
                ,##
            #end
        #end
        ]##
    #end

##TODO: Make it not treat numbers as strings
    #macro(VelToJSON $item)
        #if($item.keySet())
            #VelListToJSON($item)
        #elseif($item.size())
            #VelArrayToJSON($item)
        #elseif($item == true || $item ==false)
            $item ##
        #else
            "$item" ##
        #end
    #end

修改自 github


后续 -- 我真傻

其实完全可以在 server 端用 fastjson 或者 json-lib 将 对象转为 jsonObject 然后 toString; 再通过 velocity 模版语言的 $variable 传递给 js 的一个变量,在浏览器解析后就是一个 json 对象。

将转化步骤提前到Java程序步骤,瞬间思路明晰了。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部