好久没有写东西了,可能是自从毕业就越来越懒了吧,原来还想每周更新点自己的技术的总结,现在也断了,也就想到哪里写到那里吧,今天就说说Handlenars的使用的,由于业务需要,想要使用Handlenars进行模板替换。提起Handlebars,前端工程师可能不陌生,甚至有人认为这个东西在网上搜教程简直是简单的不能再简单了,不过我是一个Java工程师,我要说的Handlbars是一个Java版的模板替换引擎,不知道大家有木有试过,感兴趣的可以试一试。
网上有很多Handlebars的功能介绍,我就不详细赘述了,虽然我要说的是Handlebars作为Java模板替换引擎,但是功能也都大体一样,可能很多人用不上,因为有太多模板引擎要比这个好用,但是用于自己以后使用吧!!!!
在这里不得不说GitHub是个好东西,我要说的Handlebars也是来源于GitHub的源码,吼吼...............我只是用了其中的一小部分的功能,如果需要更深入的研究奉上Github源码地址:https://github.com/jknack/handlebars.java
项目需要jar包: antlr4-runtime-4.5.jar;commons-lang3-3.4.jar;handlebars-2.0.0.jar;rhino-1.7R4.jar;slf4j-api-1.7.12.jar
部分代码:
private static Handlebars handlebars = new Handlebars(); public static String replace(String handlebarsStr, Map<String, Object> obj) { String result = ""; try { Template template = handlebars.compileInline(handlebarsStr); //此处为注册Handlebars自定义helper HandlebarsHelper.registerAllHelpers(handlebars); result = template.apply(obj); return result; } catch (IOException e) { e.printStackTrace(); } return result; }
自定义Helper:
public static void registerAllHelpers(Handlebars handlebars) { handlebars.registerHelper("if_eq", new Helper<Object>() { public CharSequence apply(final Object context, final Options options) throws IOException { CharSequence result = ""; String right = context.toString(); String left = options.hash.get("compare").toString(); if ((right != null) && (left != null)) { if (right.equals(left)) { result = options.fn(context); } else { result = options.inverse(context); } return result; } else { return null; } } }); handlebars.registerHelper("unless_eq", new Helper<Object>() { public CharSequence apply(final Object context, final Options options) throws IOException { CharSequence result = ""; String right = context.toString(); String left = options.param(0); if ((right != null) && (left != null)) { if (right.equals(left)) { result = options.inverse(context); } else { result = options.fn(context); } return result; } else { return result; } } }); }以上代码可以完成一个的简单替换,测试结果:
public static void main(String[] args) { String handlebarsStr= "{{name}} 您好: 您有{{count}} 信息"; Map map = new HashMap<String ,Object>() ; map.put("name", "zhanghg") ; map.put("count", 10) ; String ste = HandlebarsUtils.replace(handlebarsStr, map); System.out.println(ste); }测试结果: