FreeMarker 自定义方法(二)
来源:互联网 发布:手机我的世界拔刀剑js 编辑:程序博客网 时间:2024/05/16 05:46
1. 模板文件 test303.ftl
<#assign x = "something">${indexOf("met", x)}${indexOf("foo", x)}
2. 自定义方法 IndexOfMethod.java
ps: 返回第一个字符串在第二个字符串第一次出现时的索引位置,如果第二个字符串中不包含第一个字符串。
package com.freemarker.test03.Method;import java.util.List;import freemarker.template.SimpleScalar;import freemarker.template.TemplateMethodModelEx;import freemarker.template.TemplateModelException;import freemarker.template.TemplateScalarModel;public class IndexOfMethod implements TemplateMethodModelEx { @Override public Object exec(List args) throws TemplateModelException { String s1 = ""; String s2 = ""; if (args.size() != 2) { throw new TemplateModelException( "Error: Expecting 2 string arguments here"); } try { TemplateScalarModel tsm = (TemplateScalarModel) args.get(0); s1 = tsm.getAsString(); TemplateScalarModel tsm2 = (TemplateScalarModel) args.get(1); s2 = tsm2.getAsString(); } catch (ClassCastException cce) { String mess = "Error: Expecting string argument here"; throw new TemplateModelException(mess); } // 返回第一个字符串在第二个字符串第一次出现时的索引位置 return new SimpleScalar(getStrPosition(s1, s2)); } /** * * deception: 返回第一个字符串在第二个字符串第一次出现时的索引位置, 如果第二个字符串中不包含第一个字符串,则返回“-1” * function: author:hsl data:Jul 13, 2015 * * @param s1 * @param s2 * @return String */ private String getStrPosition(String s1, String s2) { return String.valueOf(s2.indexOf(s1)); }}
3. 测试类文件 Test.java
package com.freemarker.test03.Method;import freemarker.template.*;import java.util.*;import java.io.*;public class Test { public static void main(String[] args) throws Exception { // 创建 Freemarker 配置实例 Configuration cfg = new Configuration(Configuration.VERSION_2_3_23); // 指定模板文件从何处加载的数据源,这里设置成一个文件目录。 cfg.setDirectoryForTemplateLoading(new File("templates")); cfg.setDefaultEncoding("UTF-8"); // 简单地重新抛出异常; 这应该在大多数生产系统中使用。 cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); // 创建一个数据模型 Map root = new HashMap(); // 调用自定义方法 ------------------------------------- root.put("indexOf", new IndexOfMethod()); // 获取模板(使用内部缓存) Template temp = cfg.getTemplate("test03.ftl"); // 合并数据模型模板 Writer out = new OutputStreamWriter(System.out); temp.process(root, out); out.flush(); out.close(); // 注意: ------------ // 为了简单起见,这里压制了异常(在方法签名中声明了异常,译者注),而在正式运行的产品中不要这样做。 }}
运行结果
2-1
0 0
- FreeMarker 自定义方法(二)
- freemarker自定义标签(二)
- freemarker自定义标签报错(二)
- FreeMarker 自定义方法
- Freemarker自定义方法
- Freemarker自定义方法
- Freemarker自定义方法
- Freemarker自定义方法
- freemarker自定义方法(六)
- Freemarker自定义方法和指令
- Spring+Freemarker实现自定义方法
- freemarker自定义指令及方法
- FreeMarker学习(二)
- freemarker 实现自定义标签的方法
- freemarker自定义标签(一)
- FreeMarker 自定义指令(三)
- freemarker 自定义freeMarker标签
- [Freemarker] Freemarker自定义函数
- 兔子--获取当前展示的activity的信息
- zend studio 11.0.0 官方版+破解文件+注册机
- Linux系统文件I/O编程(三)---I/O多路复用
- POJ 3170 Knights of Ni(两次BFS啊)
- MS SQLServer 批量附加数据库
- FreeMarker 自定义方法(二)
- 为什么你学的越多,越没法行动?
- (ros/navigation/slam_gmapping) map_server地图服务器
- 哈夫曼树(最优二叉树)
- SSH HTTPS 公钥、秘钥、对称加密、非对称加密、 总结理解
- strategy pattern in Python
- Arcgis实现为栅格中nodata或者数据质量差的点赋邻域值Nibble工具
- android studio 导入android 工程
- GRE写作必备句型