Grails - 如何从表单调用控制器方法

Posted

技术标签:

【中文标题】Grails - 如何从表单调用控制器方法【英文标题】:Grails - how to call a controller method from a form 【发布时间】:2017-12-11 23:35:22 【问题描述】:

我对 grails 完全陌生,感谢任何帮助。 此代码在我的 gsp 文件中:

<g:form action="backfillMachineTags">
            <fieldset class="buttons">
                <g:submitButton name="create" class="save"
                                value="$message(code: 'default.button.create.label', default: 'Create')"/>
            </fieldset>
        </g:form>

这段代码在我的 RegressionPoolMachineController.groovy 文件中:

def backfillMachineTags()
    
        flash.message = "testing message"
        redirect(action: "list")
    

但是当我点击表单上的提交按钮时,该方法永远不会输入,我得到一个 404 not found。

消息:/pool-manager/regressionPoolMachine/backfillMachineTags

状态:请求的资源不可用。

我也试过这样做:

<g:form url="[action:'backfillMachineTags',controller:'RegressionPoolMachineController']">

但找不到类似的 404。

我是否缺少连接表单和控制器的步骤?

【问题讨论】:

【参考方案1】:

尝试使用以下内容:

<g:form controller = "controllerName" action ="actionName" >
    <fieldset class="buttons">
        <g:submitButton name="create" class="save" value ="$message(code: 'default.button.create.label', default: 'Create')"/>
    </fieldset>
 </g:form>

【讨论】:

【参考方案2】:

除了“action”属性之外,尝试在表单中添加“controller”属性。您可以使用 url 而不是控制器和操作,但您需要类似 url="$createLink(controller: "myController", action: "myAction")" 而不是您在此处显示的内容。

供参考:http://docs.grails.org/2.5.6/ref/Tags/form.html

您还可以在浏览器中查看生成的 HTML(仅查看源代码)并查看生成的网页上实际生成的内容。这通常有助于找出为什么事情没有按照您的意愿进行!

【讨论】:

再解释一下:默认情况下,控制器是让您进入页面的任何控制器。所以它是可选的,但强烈推荐(无论如何根据我的经验),因为您稍后可能会在您的项目中从其他路径到达该页面,并且指定控制器永远不会受到伤害!

以上是关于Grails - 如何从表单调用控制器方法的主要内容,如果未能解决你的问题,请参考以下文章

Grails - 从 Javascript 方法调用控制器和渲染模板

如何从grails中的控制器调用服务

在 Grails 中,如何从 g:select 调用控制器操作

如何在不在 grails 中生成视图的情况下调用动作 [关闭]

如何从 gsp 调用 Grails 服务?

单元测试控制器时无法模拟 Grails 服务方法 - MissingMethodException