繁体   English   中英

控制器中的Grails默认方法

[英]Grails default methods in controller

我在使用grails保存域实例时遇到问题; 传递给控制器​​中的默认更新方法的domainInstance为NULL。 我提交的GSP页面不是默认的编辑页面。 我有来自DB的某些值需要保存。 我在页面上定义了包含我需要提交的值的表单标记,如下所示。 <g:form id="sampleForm" url="[resource:domainInstance, controller:'cntrlrName', action:'update']" method="PUT" >

我也有一个看起来像这样的版本字段。 <g:hiddenField name="version" value="${domainInstance?.version}" />

我的g:提交如下<g:actionSubmit action="update" value="${message(code: 'default.button.update.label', default: 'Update')}" />

为什么我的域实例为空? 我错过了什么?

这是人们可能犯的常见错误。 <g:form>标记中的属性id不是HTML标记的id属性,但它是在Grails的默认映射的链接中使用的id,即

"/$controller/$action/$id" {}

因此,将您的代码更改为:

<g:form name="sampleForm" id="${domainInstance.id}" controller="cntrlrName" action="update" method="PUT">

您可以传递domainInstance,但我觉得传递id而不是对象是更好的做法。 尝试传递域实例的id,然后读取控制器中的对象。

<g:form name="sampleForm" action="action" controller="controller" id="${domainInstance.id}" ></g:form>

//在控制器中

def resource = Domain.read(params.id)

另一种方法是将domainInstance作为hiddenField传递

<g:hiddenField name="resource" value="$domainInstance" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM