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

Can Freemarker macro parameters use other parameters for their default values?

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

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

默认值只是一个普通的表达式,因此它可以像这样引用一个数据模型变量(以及其他变量):<#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