[英]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.