2011-06-07 64 views
1

多個域對象我非常中的Grails一個新手。我正在學習一個基本的CRUD操作。這裏我有2個域對象Person和Address。每個人只需要表單提交到Grails中

所以我有一個GSP形式收集用戶名,名字,姓氏,年齡和地址字段,並應保存到數據庫中Person和Address基本上2表,只有一個地址。那麼如何將代碼寫入映射2個域類的控制器(Person & Address)。

感謝您的回答。

UPDATE:我用下面的代碼沒有工作

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] 
+0

我認爲我忘記了一些東西。請嘗試以下操作:將static belongsTo = [person:Person]添加到地址域類。在同一時間內保存兩個域類所需的人員和地址之間建立了雙向關係。如果你不想要這個,你可以在控制器類中執行以下操作:Address adr = new Address(params.address); Person person = new Person(params); person.address = adr.save(); – hitty5 2011-06-07 09:34:31

回答

2
class Person { 
    String name 
    Address address 
} 

class Address { 
    String city 
} 

普惠制不得不看somethink像:

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

def p = new Person(params) 
p.save() 
+0

我將我用過的代碼添加到了我的原始評論中,請參閱 – srisris 2011-06-07 08:50:22