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

近期需要实现一个小 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程序步骤,瞬间思路明晰了。

转载于:https://my.oschina.net/Wallen/blog/994769

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值