控制器中的Grails默认方法

控制器中的Grails默认方法,grails,Grails,在grails中保存域实例时遇到问题;传递给控制器中默认更新方法的domainInstance为NULL。我提交的GSP页面不是默认的编辑页面。我需要保存DB中的某些值。我在页面上定义了表单标签,其中包含我需要提交的值,如下所示。 我还有一个版本字段,看起来像这样。 我的g:提交如下 为什么我的域实例为空?我遗漏了什么?您可以传递domainInstance,但我觉得传递id而不是对象是更好的做法。尝试传递域实例的id,然后读取控制器中的对象 <g:form name="sample

在grails中保存域实例时遇到问题;传递给控制器中默认更新方法的domainInstance为NULL。我提交的GSP页面不是默认的编辑页面。我需要保存DB中的某些值。我在页面上定义了表单标签,其中包含我需要提交的值,如下所示。

我还有一个版本字段,看起来像这样。

我的g:提交如下


为什么我的域实例为空?我遗漏了什么?

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

<g:form name="sampleForm" action="action" controller="controller" id="${domainInstance.id}" ></g:form>
另一种方法是将domainInstance作为hiddenField传递

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

这是一个人可能犯的常见错误。
标记中的属性
id
不是HTML标记的
id
属性,而是Grails默认映射链接中使用的id,即

"/$controller/$action/$id" {}
因此,将您的标签更改为:

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


请向社区展示一些代码,以帮助您解决问题,并发布控制器代码。对不起。我注意到代码没有出现在我的问题描述中。我现在已经更新了。非常感谢你
<g:form name="sampleForm" id="${domainInstance.id}" controller="cntrlrName" action="update" method="PUT">