Freemarker - добавление значений в хеш - PullRequest
2 голосов
/ 02 апреля 2011

Я пытаюсь добавить значения в HashMap в моем шаблоне Freemarker.Я также использую BeanWrapper, чтобы видеть открытые методы из моих объектов Java.

В моей модели данных у меня есть HashMap:

root.put("myName", new HashMap());

Как я уже упоминал выше, я используюBeanWrapper, чтобы я мог использовать все методы своих объектов Java:

BeansWrapper wrapper = new BeansWrapper();
wrapper.setExposureLevel(0);
cfg.setObjectWrapper(wrapper);//cfg = new Configuration();

Теперь в моем файле шаблона (test.ftl) я пытаюсь вызвать метод put из HashMap (который я сохранил вмодель данных..выше):

${myName.put["fname:John"]}

Эта последняя строка не работает, и я получаю сообщение об ошибке:

freemarker.template.TemplateException: Expected hash. myName.put evaluated instead to freemarker.ext.beans.SimpleMethodModel on line 16, column 11 in test.ftl.

Не могли бы вы сказать мне, как я могу вызвать put метод моего HashMap в файле шаблона?

1 Ответ

3 голосов
/ 04 апреля 2011

Предлагаю вам прочитать о Object Wrappers .

Мне также нравится этот вопрос из FAQ, из которого я сейчас процитирую,

"Может быть, вы должны подтолкнуть расчеты обратно в модель данных фаза строительства. В идеале модель данных содержит то, что должно отображаться, и не то, что служит основой дальнейших расчетов. "- http://freemarker.sourceforge.net/docs/app_faq.html#faq_question_14

Если вам нужна переменная в модели данных, не помещайте ее в карту, используйте директиву assign .

Увы, я понимаю, что мир не идеален, и иногда мы должны делать то, что можем.

Если вам нужно, я предлагаю построить объект, чтобы обернуть вашу Карту, т.е.

class MapWrapper
{
        Map map = new HashMap;
        ...
       public void put(Object arg)
       {
            map.put(arg);
       }
}

Затем просто поместите свою обертку карты в свою модель, и вы сможете вызывать put, как и любой другой метод.

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