控制器中的Grails默认方法

时间:2015-04-18 15:17:06

标签: grails

我在使用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')}" />

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

2 个答案:

答案 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" />