Freemarker提取属性值生成列表并实现列表对比的技术求助
在Freemarker中提取数组对象的value属性生成列表并对比的正确实现
语法错误排查
- 直接访问数组的
value属性:你的代码中step.http_0.customField1064是数组(对应示例中的customField1067),而非单个对象。直接调用.value会试图读取数组本身的value属性,而数组不存在该属性,这会引发运行时错误。 - 错误的数组初始化方式:
[(step.http_0.customField1064.value)]只会创建一个包含单个元素的数组(即便能正确读取,也仅能获取数组第一个元素的value),无法遍历所有元素提取value。
正确实现方法
要提取数组中所有对象的value属性生成新列表,需要遍历原数组逐个收集value值:
<#-- 1. 初始化空列表用于存储value值 --> <#assign taskKeys = []> <#-- 2. 遍历原数组,收集每个元素的value --> <#list step.http_0.customField1067 as item> <#assign taskKeys = taskKeys + [item.value]> </#list> <#-- 验证生成的列表 --> <#list taskKeys as key> ${key} </#list>
如果需要和另一个列表(比如targetList)逐一对比,可嵌套列表遍历实现:
<#assign targetList = ["10100000", "10130000"]> <#list taskKeys as taskKey> <#list targetList as target> <#if taskKey == target> 匹配到值:${taskKey} <#else> ${taskKey} 与 ${target} 不匹配 </#if> </#list> </#list>
注意事项
如果原数组可能为空,建议添加非空判断避免报错:
<#if step.http_0.customField1067?? && step.http_0.customField1067?size > 0> <#-- 执行遍历收集逻辑 --> <#else> 无可用数据 </#if>
内容的提问来源于stack exchange,提问作者Marco Ferraz Vitara
相关产品推荐
相关产品推荐

