首页 > 解决方案 > Freemarker 宏参数可以使用其他参数作为默认值吗?

问题描述

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

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

标签: freemarker

解决方案


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


推荐阅读