如何在Freemarker的list指令中传递字符串变量的值?
解决Freemarker动态变量传递到Java方法的问题
问题出在你调用taskHistory.getTaskHistoriesByDefinition时的参数传递方式:你用了字符串插值语法"${currentTaskDefinitionId}",这会把变量值转成静态字符串字面量传递,而非直接传递变量本身。硬编码能生效是因为直接传入了合法的字符串常量,但动态变量需要直接引用变量名。
修复步骤
- 直接传递变量名:调用Java方法时,不需要用引号和插值包裹变量,直接把
currentTaskDefinitionId作为参数传入即可 - 优化初始变量:将初始定义的空格字符串
" "改为空字符串"",避免后续拼接时引入多余空格导致参数无效
修改后的完整代码
<#assign currentTaskDefinitionId=""> <#if taskHistory??> <#assign currentTaskActivitiId= taskHistory.taskActivitiId?number> <#list taskHistory.getAllTaskHistories() as item> <#assign taskActivitiIdForApproved = taskHistory.toFMTaskHistory(item).taskActivitiId?number> <#if (taskActivitiIdForApproved < currentTaskActivitiId)> <p> list of all previous taskDefinitionId : ${taskHistory.toFMTaskHistory(item).taskDefinitionId} </p> <#elseif (taskActivitiIdForApproved = currentTaskActivitiId) && taskHistory.toFMTaskHistory(item).decisionType==1> <#assign currentTaskDefinitionId += taskHistory.taskDefinitionId> </#if> </#list> </#if> <p> Yes I am getting the value for this: ${currentTaskDefinitionId} </p>
<#if taskHistory??> <#list taskHistory.getTaskHistoriesByDefinition(currentTaskDefinitionId)! as newItem> <p> User Simple ID: ${taskHistory.toFMTaskHistory(newItem).userSimpleId} </p> </#list> </#if>
额外注意
如果currentTaskDefinitionId可能为空字符串,建议在调用方法前增加非空判断,避免传入无效参数:
<#if taskHistory?? && currentTaskDefinitionId?trim != ""> <#list taskHistory.getTaskHistoriesByDefinition(currentTaskDefinitionId) as newItem> <p> User Simple ID: ${taskHistory.toFMTaskHistory(newItem).userSimpleId} </p> </#list> </#if>
内容的提问来源于stack exchange,提问作者Mandeep trekea
相关产品推荐
相关产品推荐

