Grails从视图调用控制器方法

Grails从视图调用控制器方法,grails,loops,methods,view,controller,Grails,Loops,Methods,View,Controller,我有一个关于grails的快速问题。我有一个视图页面,它遍历一组对象来显示它们。HTML/Grails标记代码如下所示: <g:each in="${ICFList}" status="i" var="icf"> <tr> <td>${icf.printName?.encodeAsHTML()}</td> <td>${icf.activeNote?.encodeAsHTML()}</td> </tr&g

我有一个关于grails的快速问题。我有一个视图页面,它遍历一组对象来显示它们。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?.encodeAsHTML()}
${icf.activeNote?.encodeAsHTML()}
这段代码可以工作并显示我需要的内容。但是,我不想再在icf对象中存储printName变量了。该对象还包含一个用于标识它的单字符代码,我有一个基于该代码查找printName值的方法。基本上,我的问题是:

有没有办法做到这一点

<td>${icf.getNameFromCode(${icf.code})}</td>
${icf.getNameFromCode(${icf.code})}
不必将名称存储在任何地方?
getNameFromCode方法是在这个特定视图的控制器对象中定义的,但是我不知道如何从gsp访问它。非常感谢您的帮助。

我认为您无法从视图中调用控制器方法

我建议将
getNameFromCode
移动到域类,或者在taglib中实现逻辑,并使用自定义标记显示数据。选择哪个选项取决于该方法是指模型固有的内容还是与视图相关的内容


最新版本解释了如何创建和使用自定义标记。

我认为您无法从视图中调用控制器方法

我建议将
getNameFromCode
移动到域类,或者在taglib中实现逻辑,并使用自定义标记显示数据。选择哪个选项取决于该方法是指模型固有的内容还是与视图相关的内容


最新版本介绍了如何创建和使用自定义标记。

也可以通过对该控制器进行AJAX调用来实现,但我认为Gustavo的答案正是您想要的。

也可以通过对该控制器进行AJAX调用来实现,但我认为古斯塔沃的答案正是你想要的。

正式回答这个问题,你可以使用:



虽然单个实体的字段更像一个模型。

正式回答问题,您可以使用:



虽然单个实体的字段感觉更像模型。

感谢Gustavo,我给了tagLibs一次机会,它工作得非常完美。这些字段名称感觉更像模型的字段,我建议您创建域/任意类字段并使用模型。感谢Gustavo,我给了tagLibs一次机会,它工作得非常完美。这些字段名感觉更像模型的字段,我建议您创建域/任意类字段并使用模型。注意方法应该是静态的(在本例中为“列表”)注意方法应该是静态的(在本例中为“列表”)
<g:include controller="book" action="list" />