我有个简单的问题要问。我有一个 View 页面,该页面在一组对象上进行迭代以显示它们。 HTML / Grails标记代码如下所示:

<g:each in="${ICFList}" status="i" var="icf">
<tr>
    <td>${icf.printName?.encodeAsHTML()}</td>
    <td>${icf.activeNote?.encodeAsHTML()}</td>
</tr>
</g:each>

此代码有效,并显示我需要的内容。但是,我不想再在icf对象中存储printName变量。该对象还包含一个字符代码来标识它,并且我有一个方法可以根据该代码查找printName值。基本上,我的问题是这样的:

有没有办法做这样的事情
<td>${icf.getNameFromCode(${icf.code})}</td>

无需将名称存储在任何地方?
在该特定 View 的 Controller 对象中定义了getNameFromCode方法,但是我不知道如何从gsp访问它。任何帮助是极大的赞赏。

最佳答案

我认为您不能从 View 中调用 Controller 方法。

我的建议是将getNameFromCode移动到域类,或者在taglib中实现逻辑并使用自定义标签显示数据。选择哪个选项取决于该方法是引用模型固有的东西还是绑定(bind)到 View 的东西。

最新的Getting started with Grails screencast解释了如何创建和使用自定义标签。

07-24 13:56