我有一个从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()。
你可以这样做: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