我想在freemarker中获取变量的类类型,使用var.class.simpleName
;
但如果var是Map,freemarker会将类作为键来处理,以便在var中查找值。
它抛出异常。我怎样才能做到这一点 ?谢谢你的任何建议。
答案 0 :(得分:1)
首先我要问你为什么需要这个,因为FreeMarker模板即使var
完全是Map
也不应该知道。也许你的数据模型不是模板所需要的。
无论如何,就目前而言,我会为此目的编写一个自定义TemplateMethodModelEx
,您可以像${classOf(var)}
一样使用它。在TemplateMethodModelEx
实现中,您将收到TemplateModel
作为参数值,然后您可以检查它是否为AdapterTemplateModel
,如果是,您可以取回原始对象得到它的课程。 (如果它不是AdapterTemplateModel
,那么它甚至可能不是一个包装好的Java对象,所以询问原始对象的类是什么也没有意义。)但是,设置为DefaultObjectWrapper
且incompatibleImprovements
设置为小于2.3.22的AdapterTemplateModel
并不会将Map
包裹为BeansWrapper
- s ...所以在2.3.21中你仍然必须使用simpleMapWrapper
,但您至少可以将true
设置为${var?api.class}
。
在2.3.22中,实际上可以写Map
...你可以使用每晚构建。虽然它只能解决您无法访问业务方法的问题,因为业务类的主要类型是{{1}}。