将变量作为参数传递给方法

pass variable to a method as a parameter

我的 tml 文件中有以下代码:

<t:loop source="navItem.subPages" value="var:subPage">
    <t:any element="li" class="prop:classForPageName">
        <t:pagelink page="var:subPage">${getMenuPageName(var:subPage)}</t:pagelink>
    </t:any>
</t:loop>

我在将变量 var:subPage 传递给方法 ${getMenuPageName(var:subPage)} 时遇到问题,因为这会引发异常:

Could not convert 'getMenuPageName(var:subPage)' into a component parameter binding: Error parsing property expression 'getMenuPageName(var:subPage)': line 1:15 no viable alternative at input '('.

您不能在 属性 表达式中使用 binding prefixes(如 var:)。

您只能在表达式前面使用前缀,让 Tapestry 知道它应该如何解释余数(冒号后的部分)。

参考 属性 表达式的 NBF 语法以查看内部允许的内容:

Tapestry Documentation > User Guide > Property Expressions.

属性 表达式的创建只是为了支持非常基本的结构。如果您需要更复杂的表达式,您应该在 java class 中创建相应的方法,并使用 prop: 绑定前缀引用它们。

Template expansions 您已经提到 (${...}) 与参数绑定的工作方式相同:

Under the covers, expansions are the same as parameter bindings. The default binding prefix for expansions is "prop:" (that is, the name of a property or a property expression), but other binding prefixes are useful, especially "message:" (to access a localized message from the component's message catalog).