JFinal使用技巧-Enjoy模板引擎SharedMethod扩展get方法

RT:
某些业务想动态取 Java 对象的方法,有多种方式,我这里分享一种SharedMethod扩展get方法。

上 石马:

public class TemplateFn{

/**
 * 动态取Java对象的方法
 * @param obj Java对象
 * @param column 方法名,优先遵循javabean规范
 * @return 返回值
 */
    public Object get(Object obj, String column){
        try {
            try {
                return obj.getClass().getDeclaredMethod(
                "get" + StrKit.firstCharToUpperCase(column))
                .invoke(obj);
            } catch (NoSuchMethodException e) {
                return obj.getClass().getDeclaredMethod(column)
                .invoke(obj);
            }
        } catch (NoSuchMethodException | IllegalAccessException 
        | InvocationTargetException e) {
            throw new RuntimeException(e);
        }
    }
}

配置:https://jfinal.com/doc/6-7

public void configEngine(Engine me) {
me.addSharedMethod(new TemplateFn());
...

使用:

#(get(Java对象, "方法名"))


测试:

public class TplKit {
    public String getName(){
        return "myName";
    }
    public static void main(String[] args) {
        Kv data = Kv.create();
        TplKit k = new TplKit();
        data.set("k", k);
        data.set("key", "name");
        String s = "#(get(k, key))";

        Engine use = Engine.use();
        use.addSharedMethod(new TemplateFn());
        Template template = use.getTemplateByString(s);
        String str = template.renderToString(data);
        System.out.println(str);
    }
}

结果:
image.png

如果想类对象也是动态的,参考另一篇分享:https://jfinal.com/share/2625


非常好用~

有参考价值就点个赞呗~ 

评论区

yiditushe

2022-04-16 17:08

感谢大神 留着备用,哈哈。

热门分享

扫码入社