关于Handlebars.java的模板引擎的使用

时间:2022-08-24 09:03:15

       好久没有写东西了,可能是自从毕业就越来越懒了吧,原来还想每周更新点自己的技术的总结,现在也断了,也就想到哪里写到那里吧,今天就说说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);
	}
测试结果:

关于Handlebars.java的模板引擎的使用