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 中,如何从 g:select 调用控制器操作