首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用域对象字段创建视图

使用域对象字段创建视图
EN

Stack Overflow用户
提问于 2014-03-25 15:27:29
回答 2查看 1.2K关注 0票数 0

我有以下域类。

代码语言:javascript
复制
Address

String number
String roadName
String country

Person

String fName
String age
Address address

我有一个名为PersonViewSave的视图,我希望用户能够从这个视图中保存Person信息。在创建Person记录时,用户还需要创建一个Address记录。

我的个人控制器看起来如下:

代码语言:javascript
复制
PersonViewSave ={
    def ad = new Address(number: '11', roadName: 'round road', country:'France').save()
    new Person(fName: 'Alex', age: '23', address:ad).save()

}

1.)如何从视图中收集参数并将其带到PersonViewSave方法中?(有人能给我看一个带有PersonAddress文本框的GSP视图文件示例吗)

2.)如果在创建的地址中出现错误,如何防止创建一个带有地址的Person对象,如下面的new Person(fName: 'Alex', age: '23', address:ad).save()行所示

更新

代码语言:javascript
复制
    <g:form name="myForm" method="post" action="doIt">
<p>Person info:</p>

<label for="firstName">First Name</label>
    <g:textField name="firstName" id="firstName" />




<p>Address Info:</p>

<label for="roadName">Street Number</label>
    <g:textField name="roadName" id="roadName" />


<g:submitButton name="submit" value="Submit" />

在这里,我只使用了域类中的几个对象来查看它是否有效。

我还在两个域类中都有一个名为createdDate的参数。这也需要自动插入。

我的服务类别如下:

代码语言:javascript
复制
def saveService () {

def ad = new Address(params)
if (ad.save(flush: true)) {        
    def p = new Person(params)
    p.address = ad
    p.save()
} else {
    // display validation errors
}
}

1.)我得到一个错误,它是> No such property: params for class: pro.PersonService

2.)我有两个具有相同名称的参数的域类。例如,AnimalPerson域类有一个名为firstName的参数。根据您以前的解决方案,grail将如何区分它属于哪个域类?

I使用Grails2.2.4

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-25 16:20:30

下面是一种检查地址是否正确保存的方法:

代码语言:javascript
复制
def ad = new Address(params)
if (ad.save(flush: true)) {        
    def p = new Person(params)
    p.address = ad
    p.save()
} else {
    // display validation errors
}

如果保存正确,这将返回Address,这将导致true,否则返回null (或false)。

此外,您还可以通过params映射使用数据绑定来根据参数创建对象。只要params中的键与AddressPerson类中的属性名称相匹配,参数的值就会分配给对象。

因此,例如,要映射您的Person,需要如下所示的字段:

代码语言:javascript
复制
<g:form name="personForm" method="post" action="PersonViewSave">
    <p>Person info:</p>

    <label for="fName">First Name</label>
        <g:textField name="fName" id="fName" />

    <label for="age">Age</label>
        <g:textField name="age" id="age" />


    <p>Address Info:</p>

    <label for="number">Street Number</label>
        <g:textField name="number" id="number" />

    <label for="roadName">Road</label>
        <g:textField name="roadName" id="roadName" />

    <label for="country">Country</label>
        <g:textField name="country" id="country" />

    <g:submitButton name="submit" value="Submit" />
</g:form>
票数 1
EN

Stack Overflow用户

发布于 2014-03-26 07:22:45

你可以试试这个

代码语言:javascript
复制
def ad = new Address(number:params.number , roadName:params.roadName , country: params.country)
if (ad.save(flush: true)) {        
    def p = new Person(fName:params.fName , age: params.age, address:ad)
       p.save()
} else {
    // display validation errors
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22639100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档