Отправка формы нескольким объектам домена в Grails - PullRequest
1 голос
/ 07 июня 2011

Я очень новичок в Grails.Я изучаю основную операцию CRUD.Здесь у меня есть 2 объекта предмета Person и Address.Каждый человек должен иметь только один адрес

. Итак, у меня есть форма gsp, которая собирает поля имени пользователя, имени, фамилии, возраста и адреса и должна храниться в двух таблицах в базе данных Person и Address.Итак, как написать код в контроллерах, который отображает 2 класса домена (Person & Address).

Спасибо за ответ.

ОБНОВЛЕНИЕ: Я использовал следующий код, который не работал

package com.deltaintech.wr

class Person {
    String username
    String password
    String firstname
    String lastname
    String email
    Address address

    static constraints = {
    }
}


package com.deltaintech.wr

class Address {

    String address1
    String address2
    String city
    String state
    String country
    String zipcode

    static constraints = {
    }
}

package com.deltaintech.wr.register
import com.deltaintech.wr.*

class RegisterController {

    def index = { 

    }

    def register = {

        Person person = new Person(params)
        person.save()

    }
}

<!--
  To change this template, choose Tools | Templates
  and open the template in the editor.
-->

<%@ page contentType="text/html;charset=UTF-8" %>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Sample title</title>
  </head>
  <body>
    <h1>Sample line</h1>
  <g:form action="register">
   User Name <g:textField name="username"/><br>
   Password <g:passwordField name="password" /><br>
   First Name <g:textField name="firstname"/><br>
   Last Name <g:textField name="lastname"/><br>
   Email <g:textField name="email" /><br>
   Address1 <g:textField name="address.address1"/><br>
   Address2 <g:textField name="address.address2" /><br>
   City <g:textField name="address.city" /><br>
    State<g:textField name="address.state" /><br>
    Country <g:textField name="address.country" /><br>
   Zip Code <g:textField name="address.zipcode" /><br>
    <g:submitButton name="create" value="Create"/>
  </g:form>
</body>
</html>


Error 500: Executing action [register] of controller [com.deltaintech.wr.register.RegisterController] caused exception: not-null property references a null or transient value: com.deltaintech.wr.Person.address; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value: com.deltaintech.wr.Person.address
Servlet: grails
URI: /system/grails/register/register.dispatch
Exception Message: not-null property references a null or transient value: com.deltaintech.wr.Person.address 
Caused by: not-null property references a null or transient value: com.deltaintech.wr.Person.address 
Class: RegisterController 
At Line: [13] 

1 Ответ

2 голосов
/ 07 июня 2011
class Person { 
    String name 
    Address address 
} 

class Address { 
   String city 
} 

gsp должен выглядеть примерно так:

<g:form action="save">
    <g:textField name="name"/>
    <g:textField name="address.city"/>
</g:form>

в контроллере:

def p = new Person(params)
p.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...