freemarker - Freemarker 宏参数可以使用其他参数作为默认值吗?
问题描述
我们有许多 Freemarker 宏来简化 HTML 页面,例如<@macro.textfield id name 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
推荐阅读
- assembly - 如何在 Ubuntu 中动态链接到 glibc
- javascript - 尝试运行多个硒测试但得到“无法读取未定义的属性”
- python - LaunchDaemon 将不同的 Python 实例运行到终端
- python - 如何为每个输入获取keras模型中层的权重
- mysql - 如何将 mysql 数据库连接到客户端机器中的多人电脑?
- gatsby - 静态页面路由和仅客户端路由之间的Gatsby或 @reach-router ?
- sql - SQL 查询中每个标题只显示一行
- file - Serilog Net Core 3.1 不创建任何日志文件
- angular - 角度组件路由到主页
- google-app-engine - 如何对从 Google Cloud Storage 存储桶下载的用户实施速率限制?