【问题标题】:Grails call Controller method from ViewGrails 从 View 调用 Controller 方法
【发布时间】:2011-09-14 20:59:40
【问题描述】:

我有一个关于 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 变量。该对象还包含一个字符代码来识别它,我有一个方法可以根据代码查找 printName 值。基本上,我的问题是这样的:

有没有办法做这样的事情

<td>${icf.getNameFromCode(${icf.code})}</td>

无需将名称存储在任何地方? getNameFromCode 方法是在此特定视图的控制器对象中定义的,但我不知道如何从 gsp 访问它。非常感谢任何帮助。

【问题讨论】:

    标签: grails loops methods view controller


    【解决方案1】:

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

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

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

    【讨论】:

    • 注意方法应该是静态的(在这个例子中是'list')
    【解决方案2】:

    我认为您不能从视图中调用控制器方法。

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

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

    【讨论】:

    • 感谢 Gustavo,我试了一下 tagLibs,效果很好
    • 那些字段名称感觉更像模型的字段,我建议您创建域/任何类字段并使用模型。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-08
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 2015-02-10
      • 1970-01-01
      • 2019-11-10
      相关资源
      最近更新 更多