我们有许多Freemarker宏来简化HTML页面,例如<@macro.textfield id name label .../>
可以自动添加标签标记,标准CSS类等。为涵盖我们的所有使用情况,有许多参数具有默认值
但是,理想情况下,我们希望比简单文字更高级的默认值。例如,如果文本字段未指定自定义value
,则默认应使用name
参数(例如${parameters[name]!}
)从模型中获取文本字段。反过来,名称通常可以从ID派生。带有id="foo"
的字段很可能需要name="form.foo"
。有没有一种有效的方法可以做到这一点?
答案 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