如何获取String对象的类名?

时间:2012-02-25 12:09:42

标签: freemarker

我将bean的属性设置为String对象,然后当我尝试获取属性的类名时,抛出以下错误:

  

预期哈希。 plist [0] .javaType在ibatis / macro.ftl的第7行第26行上评估为freemarker.template.SimpleScalar。

模板代码如下:

<#assign clsName=plist[0].javaType.class.name>

当属性javaType设置为java bean时,可以正确获取类名。为什么?我需要属性可以给任何类型,java bean,非java bean。

1 个答案:

答案 0 :(得分:1)

问题的根源在于FreeMarker不能直接使用Java值/对象。模板语言有自己的简单类型系统,来自外部的东西通过一种称为对象包装的技术映射到它。 (不是来自外部的值甚至没有内部包裹的对象。)你仍然能够得到某个对象的类是纯粹偶然的......会发生的事情是对象包装机器决定了对象应该映射到“哈希”FreeMarker类型,并且哈希项将对应于对象的JavaBean属性。该对象具有getClass()方法,该方法(错误地)被视为“类”属性的getter。

所以没有通用的方法来获得课程......其中因为有时候没有课程可以获得。你可以编写一个TemplateMethodModelEx来做一个足够好的工作。