fex-team / jello

Front End Integrated Solution for J2EE Velocity.
206 stars 49 forks source link

Velocity 中如何快速实现 json_encode 功能 #9

Closed 2betop closed 10 years ago

2betop commented 10 years ago

在尝试用 jello 开发项目的时候遇到了一个问题,也有不少同学也反应过,就是如何快速的实现 json_encode 功能。

很多时候,都需要把后端的数据 object 转换成 json 格式给 js 使用。但是 velocity 里面又没有对应的方法。

如是今天研究了一把,目前想到了一个比较合理的方法就是通过 velocity tools 提供,暂时先把方法贴出来,后续补充到 jello 的 jar 里面去。

实现步骤

新建一个 tool 类

package com.baidu.fis.velocity.util;

import com.alibaba.fastjson.JSON;
import org.apache.velocity.tools.config.DefaultKey;

@DefaultKey("jello")
public class jelloTool {
    public static String jsonEncode(Object obj) {
        return JSON.toJSONString(obj);
    }
}

在 spring 的配置中启用

<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
    <property name="cache" value="true"/>
    <property name="prefix" value=""/>
    <property name="suffix" value=".vm"/>
    <property name="exposeSpringMacroHelpers" value="true"/>
    <property name="contentType" value="text/html;charset=UTF-8" />
    <property name="attributesMap">
        <map>
            <entry key="esc"><bean class="org.apache.velocity.tools.generic.EscapeTool"/></entry>
            <entry key="render"><bean class="org.apache.velocity.tools.generic.RenderTool" /> </entry>
            <entry key="jello"><bean class="com.baidu.fis.velocity.util.jelloTool" /> </entry>
        </map>
    </property>
</bean>

这样就可以在模板中这么使用。

<script>
    var user = $jello.jsonEncode($user);
    console.log(user);
</script>