Как получить имя класса объекта String? - PullRequest
1 голос
/ 25 февраля 2012

Я устанавливаю свойство бина для объекта String, затем, когда я пытаюсь получить имя класса свойства, ниже выдается ошибка:

Ожидаемый хеш. Вместо этого plist [0] .javaType оценивается как freemarker.template.SimpleScalar в строке 7, столбец 26 в ibatis / macro.ftl.

код шаблона, как показано ниже:

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

Когда для свойства javaType установлено значение java-компонента, имя класса может быть правильно получено. Почему это? Мне нужно, чтобы свойство могло быть дано любого типа, Java-бин, не Java-бин.

1 Ответ

1 голос
/ 25 февраля 2012

Корень проблемы в том, что FreeMarker не работает напрямую со значениями / объектами Java.Язык шаблонов имеет свою собственную простую систему типов, и материал, поступающий извне, сопоставляется с этим с помощью метода, называемого объектным переносом.(Значения, которые не приходят извне, даже не содержат внутри обернутого объекта.) То, что вы все еще смогли получить класс некоторого объекта, является чисто случайным ... Что происходит, когда механизм обертывания объектов решает, чтоОбъект должен быть сопоставлен с типом FreeMarker "hash", а элементы hash будут соответствовать свойствам JavaBean объектов.У объекта есть метод getClass(), который (ошибочно) рассматривается как получатель свойства "class".

Так что нет универсального способа получить класс ... среди других, потому что иногда нет классаполучить.Вы можете написать TemplateMethodModelEx, который приложит достаточно усилий для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...