[英]Returning list from Java to Freemarker
我搜索了這些問題,發現可以從Freemarker中返回列表並調用Java對象方法,但是我無法使其工作。 我嘗試從對象方法調用該方法,並使用通過TemplateMethodModelEx類實現的方法。
這是我的Freemarker:
<#assign relations>
${filterStationRelationships(record.relationships, [1,22,23])}
</#assign>
<relationships>
<#list relations as rel>
<relationship type="${rel.name}">${rel.sourceId1!"NO STATION"}</relationship>
</#list>
</relationships>
這是我的Java(實際上是Groovy):
@BoundClass(bindingName="filterStationRelationships")
class FilterStationRelationships implements TemplateMethodModelEx {
@Override
public List<StationRelationship> exec(List args) throws TemplateModelException {
if (args.size() != 2) {
throw new TemplateModelException('FilterStationRelationships needs two arguments')
}
List<StationRelationship> stationRels = (List<StationRelationship>)DeepUnwrap.unwrap(args[0])
List<Integer> typeIds = (List<Integer>)DeepUnwrap.unwrap(args[1])
Map map = new HashMap();
stationRels.findAll { rel ->
typeIds.contains(rel.typeId)
}
}
}
我已經驗證了args在Groovy中是有效的,但是當它將List發送回Freemarker時,我得到了:
<relationships>
預期的收集或順序。 相反,在default-groovy-template的第24行第24列上,對freemarker.template.SimpleScalar進行了評估。 有問題的說明:
==>列出關系為rel [在default-groovy-template的第24行,第17列]
有任何想法嗎?
問題出在#assign
。 應該是這樣的:
<#assign relations = filterStationRelationships(record.relationships, [1,22,23])>
您正在使用的東西<#assign targetVar>...</#assign>
用於捕獲體內生成的輸出。 這樣,它總是產生一個字符串。
(還要注意,在您顯示的示例中,您根本不需要#assign
,因為您可以將<#list filterStationRelationships(record.relationships, [1,22,23]) as rel>
。但是我假設實際模板更加復雜。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.