Freemarker在地图或列表上调用Java方法

问题描述 投票:0回答:1

我有一个从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;
   }

}

freemarker代码:

<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()。

java freemarker
1个回答
0
投票

你可以这样做:myMap?api.someCustomMethod()?api将公开Map(或List)的Java API而不是映射键(或列表项)。

请注意,使用FreeMarker的默认配置时,?api不可用。请参阅此处如何启用它:https://freemarker.apache.org/docs/ref_builtins_expert.html#ref_buitin_api_and_has_api

© www.soinside.com 2019 - 2024. All rights reserved.