Freemarker宏参数可以使用其他参数作为默认值吗?

时间:2019-01-16 02:56:10

标签: freemarker

我们有许多Freemarker宏来简化HTML页面,例如<@macro.textfield id name label .../>可以自动添加标签标记,标准CSS类等。为涵盖我们的所有使用情况,有许多参数具有默认值

但是,理想情况下,我们希望比简单文字更高级的默认值。例如,如果文本字段未指定自定义value,则默认应使用name参数(例如${parameters[name]!})从模型中获取文本字段。反过来,名称通常可以从ID派生。带有id="foo"的字段很可能需要name="form.foo"。有没有一种有效的方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

默认值只是一个普通表达式,因此它可以像这样<#macro something name=form.name>引用数据模型变量(以及其他)。它还可以引用另一个宏参数:<#macro something p1 p2=p1>。 (顺序不重要,FreeMarker会找出正确的评估顺序。甚至允许使用循环p1=p2 p2=p1之类的循环依赖项,因为可以在调用中至少指定一个参数时就可以解析它。)

另请参阅:https://freemarker.apache.org/docs/ref_directive_macro.html#ref.directive.macro