【问题标题】:Grails default methods in controller控制器中的 Grails 默认方法
【发布时间】:2015-04-18 15:17:05
【问题描述】:

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

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

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

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

【问题讨论】:

  • 请向社区展示一些代码以帮助您
  • 你的问题是什么,并发布你的控制器代码。
  • 对不起。我注意到代码没有出现在我的问题描述中。我现在已经更新了。

标签: grails


【解决方案1】:

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

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

所以把你的标签改成:

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

【讨论】:

    【解决方案2】:

    您可以传递 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" />
    

    【讨论】:

    • 非常感谢Dspano
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2016-04-03
    相关资源
    最近更新 更多