Grails在“创建”和“保存”之间更新实例的位置

Grails在“创建”和“保存”之间更新实例的位置,grails,Grails,我想知道,在scaffold控制器和视图中,您在创建页面中填写的字段如何在保存操作之前更新到您的域类实例。我在Grails2.4.4上 举个例子,我有一个名为Customer的类,我以默认方式生成控制器和视图 class Customer { String name; String email; String address; String mobile; } 当您运行应用程序时,在生成的绿色样式索引页面中,单击createnewcustomer,当链接转到cr

我想知道,在scaffold控制器和视图中,您在创建页面中填写的字段如何在保存操作之前更新到您的域类实例。我在Grails2.4.4上

举个例子,我有一个名为Customer的类,我以默认方式生成控制器和视图

class Customer {
    String name;
    String email;
    String address;
    String mobile;
}
当您运行应用程序时,在生成的绿色样式索引页面中,单击createnewcustomer,当链接转到createaction时,将创建一个客户实例

<ul>
    <li><a class="home" href="${createLink(uri: '/')}"><g:message code="default.home.label"/></a></li>
    <li><g:link class="create" action="create"><g:message code="default.new.label" args="[entityName]" /></g:link></li>
</ul>
但是现在你还没有填写所有字段的表单!在create.gsp中填写表单后,该链接将直接指向保存操作

<g:form url="[resource:customerInstance, action:'save']" >
    <fieldset class="form">
        <g:render template="form"/>
    </fieldset>
    <fieldset class="buttons">
        <g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" />
    </fieldset>
</g:form>

Grails会自动为您实现这一点。Grails控制器可以接受两类参数:基本对象和复杂对象。默认行为是按名称将HTTP请求参数映射到操作参数(如果适用)。例如,假设我们有这样一个控制器:

def doSomething(Integer magicNumber) {
    println "The magic number is $magicNumber"
}
以及包含如下字段的视图:

<g:textField name="magicNumber" value="${magicNumber}" />

Grails会自动为您实现这一点。Grails控制器可以接受两类参数:基本对象和复杂对象。默认行为是按名称将HTTP请求参数映射到操作参数(如果适用)。例如,假设我们有这样一个控制器:

def doSomething(Integer magicNumber) {
    println "The magic number is $magicNumber"
}
以及包含如下字段的视图:

<g:textField name="magicNumber" value="${magicNumber}" />

正是我想要的答案!非常感谢。正是我想要的答案!非常感谢。
@Transactional
def save() {
    Customer customerInstance = new Customer(params)
    customerInstance.validate()

    if (customerInstance == null) {
        notFound()
        return
    }
    if (customerInstance.hasErrors()) {
        respond customerInstance.errors, view:'create'
        return
    }
    customerInstance.save flush:true
    //omit everything after save here
}