在FreeMarker中获取地图类

时间:2015-01-15 07:34:19

标签: freemarker

我想在freemarker中获取变量的类类型,使用var.class.simpleName; 但如果var是Map,freemarker会将类作为键来处理,以便在var中查找值。 它抛出异常。我怎样才能做到这一点 ?谢谢你的任何建议。

1 个答案:

答案 0 :(得分:1)

首先我要问你为什么需要这个,因为FreeMarker模板即使var完全是Map也不应该知道。也许你的数据模型不是模板所需要的。

无论如何,就目前而言,我会为此目的编写一个自定义TemplateMethodModelEx,您可以像${classOf(var)}一样使用它。在TemplateMethodModelEx实现中,您将收到TemplateModel作为参数值,然后您可以检查它是否为AdapterTemplateModel,如果是,您可以取回原始对象得到它的课程。 (如果它不是AdapterTemplateModel,那么它甚至可能不是一个包装好的Java对象,所以询问原始对象的类是什么也没有意义。)但是,设置为DefaultObjectWrapperincompatibleImprovements设置为小于2.3.22的AdapterTemplateModel并不会将Map包裹为BeansWrapper - s ...所以在2.3.21中你仍然必须使用simpleMapWrapper,但您至少可以将true设置为${var?api.class}

在2.3.22中,实际上可以写Map ...你可以使用每晚构建。虽然它只能解决您无法访问业务方法的问题,因为业务类的主要类型是{{1}}。