访问对象内的字段时,速度模板不会去模板化

Posted

技术标签:

【中文标题】访问对象内的字段时,速度模板不会去模板化【英文标题】:Velocity Template is not detempletizing when a field inside object is accessed 【发布时间】:2017-05-18 20:47:17 【问题描述】:

我写了下面的代码,基本上需要打印Hello simple Kishore,方法是在模板Hello $string $value.name中替换$string$value.name的值。

它替换了$string 的值,但是$value.name 永远不会被替换。 我尝试对 $value 的值进行去模板化,并且在将 TestClass$Sample@5594a1b5 作为输出时效果很好,所以问题在于 模板无法访问对象中的字段

由于一些限制,我必须使用VelocityEngine.evaluate 本身而不是VelocityEngine.mergeTemplate。

代码:

class Sample 
    private String name = "Kishore";

    public String getName() 
        return name;
    

    public void setName(String name) 
        this.name = name;
    


public class Test 
    public static void main(String args[]) throws Exception 
        String query = "Hello $string $value.name";

        VelocityContext vCtx = new VelocityContext();
        vCtx.put("string","simple");
        vCtx.put("value", new Sample());

        Writer out = new StringWriter();
        VelocityEngine engine = new VelocityEngine();
        engine.init();
        engine.evaluate(vCtx, out, "ERR:", new StringReader(query));

        System.out.println(out.toString());
    

输出:

Hello simple $value.name

【问题讨论】:

【参考方案1】:

要解决此问题,您应该为 Sample 类添加 public 修饰符:

public class Sample 
    ...

【讨论】:

啊,我只是在调试它,发现 ClassMap 类创建所有方法的缓存查找公共修饰符 if Modifier.isPublic(classToReflect.getModifiers())) populateMethodCacheWith(methodCache, classToReflect); 谢谢:)

以上是关于访问对象内的字段时,速度模板不会去模板化的主要内容,如果未能解决你的问题,请参考以下文章

类与模板注意事项

访问模板化 Django 中的表单字段属性

php模板引擎smarty

Freemarker页面静态化技术

[UWP]了解模板化控件(5.2):UserControl vs. TemplatedControl

Vue——模板和样式