【问题标题】:Access template model from a macro using parameter使用参数从宏访问模板模型
【发布时间】:2015-01-07 00:12:02
【问题描述】:

我有一个带有输入字段的表单(示例已简化):

<input type="text" value="${model.person.age}">

这是按预期工作的,现在我想为此编写一个宏:

 <#macro input path inputType="text">
    <input type="${inputType}" value="${model[path]}">
</#macro>

可以和

一起使用
 <@lib.input "person.age" />

我找到了 ${model[path]} 解决方案here,但它不适用于我的情况。我正在使用 Freemarker 2.3.21 和 Spring MVC 4.1.0。

【问题讨论】:

    标签: freemarker


    【解决方案1】:

    你不能只传递值本身,比如&lt;@lib.input person.age&gt;吗?无论如何,如果您绝对必须传入未计算的表达式,那么在宏中您可以使用value="${path?eval}"。当然,它不必是“路径”,它可以是任何一种表达方式。 (model[path] 不起作用,因为[] 中的值是一个变量名,可以包含任何字符,而不是某种路径表达式。)

    【讨论】:

    • 成功了,非常感谢。传递值本身不是一种选择,因为我需要其他值的路径(例如输入名称、标签文本)。如果我理解得很好,[]中只能使用变量。我可以使用 path 表达式值创建变量吗?下面的代码不起作用,我想我又错过了一些东西。 &lt;#macro input path inputType="text"&gt; &lt;#local pathVar=path&gt; &lt;input type="${inputType}" value="${model[pathVar]}"&gt; &lt;/#macro&gt;
    • [] 包含一个像往常一样计算的任意复杂表达式,结果值(必须是字符串)将用作子变量名称。 foo.barfoo['bar'] 相同,只是[] 的子变量名称可以是动态的(如foo["b" + rest]),并且可以包含任何字符。
    • 顺便说一句,“路径”的确切语法是什么?
    • 原始问题中给出了确切的语法 - 它是“person.age”。
    • 这只是一个例子,但无论如何。 ?eval 没有解决的任何问题?
    猜你喜欢
    • 1970-01-01
    • 2011-05-16
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多