在我们日常模板开发过程中,魔力Code工具虽然本身已经很有魔力,但是依然无法满足千人千面的需求。我们常常需要进行自定义的数据处理,自定义的工具类提供。而这两个需求我们都是原生支持的。
自定义工具& 数据处理 这两个是按顺序加载的。因为我们考虑到自定义处理数据可能会用到自定义的工具,所以自定义工具会先加载,然后在进行自定义数据处理。
自定义工具加载-->自定义数据处理;
特别说明:
当然在以上两个自定义处理执行前,我们的数据模型已经按照您的配置信息预先加载到内存以及脚本上下文,您已经可以直接引用了。
按约定优于配置的设计模式,我们约定,在autoCode.xml所处的根目录下:
- 自定义工具:moliTemplate/customTool.gsp 存储在这个文件中;
- 自定义数据:moliTemplate/customDataProcess.gsp 存储在这个文件中;
如图所示:
相对路径,在autoCode.xml 根目录下的:moliTemplate/customTool.gsp 文件中存储。
为普通的groovy template模板,我们可以使用groovy的闭包进行工具声明,然后通过预留的扩展插口:customTool['toolKey'] = 闭包对象引用; 回设到全局处理上下文之中,如下图所示:
<%
/**
* 声明一个sayHello的闭包,类似js的function;
*/
def sayHello = { userName, helloMsg ->
return """${userName} say: ${helloMsg}! """
}
/**
* 将改闭包,设置到customTool map对象之中;
*/
customTool['sayHello'] = sayHello;
%>
相对路径,在autoCode.xml 根目录下的:moliTemplate/customDataProcess.gsp 文件中存储。
为普通的groovy template模板,我们可以通过预留的扩展插口:customData['dataKey'] = 自定义数据; 回设到全局处理上下文之中,如下图所示:
<%
/**
* 引用在customTool中声明的 打招呼工具;
*/
def sayHello = customTool['sayHello']
/**
* 将经过处理的数据设置到:customData map对象中;
* 即可全局上下文直接获取;
*/
customData['myData01'] = "my first custom data value";
customData['helloInfo'] = sayHello("David", "welcome to moliCode!");
%>
新建一个模板 templates/customTest.gsp, 然后可以通过以下方式使用工具类和自定义数据:
<%
/**
* 测试自定义工具类;
* 直接传入参数,调用工具类方法
*/
println customTool.sayHello('模板页面', "Hello world")
/**
* 测试自定义数据;
* 直接打印出数据;
*/
println "自定义数据 key: myData01,value:" + customData['myData01'];
println "自定义数据 key: helloInfo,value:" + customData['helloInfo'];
%>
是不是非常简单,当然我们当前演示的并没有进行复杂的数据处理,大家可以直接对原始的tableModel 获取其它数据进行预处理,并调整为符合自己需要的数据结构,方便我们在模板执行时直接使用。
输出结果:
模板页面 say: Hello world!
自定义数据 key: myData01,value:my first custom data value
自定义数据 key: helloInfo,value:David say: welcome to moliCode!!