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
我们有一些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