2011-06-14 70 views
1

我对grails有一个简单的问题。我有一个查看页面迭代一个对象数组来显示它们。 HTML/Grails标签代码如下所示:从查看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> 

而不必存储名称的任何地方? getNameFromCode方法在控制器对象中为此特定视图定义,但我无法弄清楚如何从gsp访问它。任何帮助是极大的赞赏。

回答

4

我不认为你可以从视图中调用控制器方法。

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

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

+0

感谢Gustavo我给了tagLibs一个镜头,它的工作很完美 – 2011-06-14 19:39:56

+0

这些字段名称更像模型的字段,我建议您制作域/任何类字段并使用Model。 – 2011-06-15 07:27:34

1

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

6

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

<g:include controller="book" action="list" /> 

虽然单个实体的领域感受到这么多像模特