gpt4 book ai didi

java - 将列表从 Java 返回到 Freemarker

转载 作者:行者123 更新时间:2023-11-30 04:10:13 25 4
gpt4 key购买 nike

我搜索了这些问题,发现您可以从 Freemarker 中返回列表并调用 Java 对象方法,但是我无法让它工作。我尝试从对象方法调用该方法并使用通过 TemplateMethodModelEx 类实现的方法。

这是我的自由标记:

<#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)
}

}

}

我已经验证了参数在 Groovy 中是有效的,但是当它将列表发送回 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> 。但我认为真正的模板更复杂。)

关于java - 将列表从 Java 返回到 Freemarker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19798907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com