代码之家  ›  专栏  ›  技术社区  ›  ThrawnCA

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

  •  0
  • ThrawnCA  · 技术社区  · 5 年前

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

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

    1 回复  |  直到 5 年前
        1
  •  1
  •   ddekany    5 年前

    默认值只是一个普通表达式,因此它可以引用数据模型变量(除其他变量外),如下所示: <#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