Вызов Freemarker Java-метод на картах или списках - PullRequest
0 голосов
/ 12 марта 2019

У меня есть объект, который выходит из HashMap и помещает его в модель данных freemarkers. Теперь каждый раз, когда я пытаюсь вызвать метод для этого объекта, freemarker пытается получить доступ к ключу внутри карты, что приведет к ошибке. Я получил ту же проблему с объектами, которая выходит из ArrayList. Есть ли способ вызывать методы Java этих объектов вместо доступа к их ключам?

Вот экзамен:
Объект, который я хотел бы поместить в модель данных:

public class ObjectInDataModel extends HashMap<String, String> {

   private static final long serialVersionUID = 1L;

   private boolean bSuccess;

   public ObjectInDataModel(boolean bSuccess) {
      this.bSuccess = bSuccess;
   }

   public boolean isSuccessful() {
      return bSuccess;
   }

}

Код бесплатного маркера:

<html>
    <head>
    </head>
    <body>
        <#if object.isSuccessful() == true>
            <h1>Success</h1>
        <#else>
            <h1>Fail</h1>
        </#if>
    </body>
</html>

Когда я пытаюсь его обработать, я получаю следующую ошибку:

09:10:59,458 ERROR [stderr] (default task-1) org.auctores3.fw.util.ActFwRuntimeException: freemarker.core.InvalidReferenceException: The following has evaluated to null or missing:
09:10:59,458 ERROR [stderr] (default task-1) ==> object.isSuccessful  [in template "test" at line 5]

Поскольку Freemarker пытается получить доступ к ключу isSuccessful вместо вызова метода isSuccessful ().

1 Ответ

0 голосов
/ 13 марта 2019

Вы можете сделать это так: myMap?api.someCustomMethod().?api предоставит Java API для Map (или List) вместо ключей карты (или элементов списка).

Обратите внимание, что при конфигурации по умолчанию FreeMarker ?api недоступен,Смотрите здесь, как включить его: https://freemarker.apache.org/docs/ref_builtins_expert.html#ref_buitin_api_and_has_api

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