我在使用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')}" />
为什么我的域名实例为空?我错过了什么?
答案 0 :(得分:2)
这是人们可能犯的常见错误。 id
标记中的属性<g:form>
不是HTML标记的id
属性,但它是在Grails默认映射的链接中使用的ID,即
"/$controller/$action/$id" {}
因此请将您的代码更改为:
<g:form name="sampleForm" id="${domainInstance.id}" controller="cntrlrName" action="update" method="PUT">
答案 1 :(得分:1)
您可以传递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" />