我有以下域类。
Address
String number
String roadName
String country
Person
String fName
String age
Address address
我有一个名为PersonViewSave
的视图,我希望用户能够从此视图中保存Person
信息。创建Person
记录时,用户还需要创建Address
记录。
My Person控制器如下所示:
PersonViewSave ={
def ad = new Address(number: '11', roadName: 'round road', country:'France').save()
new Person(fName: 'Alex', age: '23', address:ad).save()
}
1.。)如何从视图中收集参数并将其带入PersonViewSave
方法? (并且有人可以向我展示包含Person
和Address
文本字段的示例GSP视图文件)
2。)如果在创建的地址中出现错误,如何阻止创建具有此行所示地址的Person对象new Person(fName: 'Alex', age: '23', address:ad).save()
更新
<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" />
在这里,我只使用Domain类中的少数对象来查看它是否有效。
我在两个Domain类中都有一个名为createdDate的参数。这也需要自动插入。
我的服务类如下:
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。)我收到错误,它是&gt; No such property: params for class: pro.PersonService
2.。)我有2个具有相同名称的参数的域类。例如,Animal
和Person
域类具有名为firstName
的参数。根据您之前的解决方案,如何将grail区分为它所属的域类?
我使用的是Grails 2.2.4
答案 0 :(得分:1)
这是一种检查地址是否正确保存的方法:
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
中的键与Address
和Person
类中的属性名称匹配,参数的值就会分配给该对象。
因此,举例来说,要映射Person
,您需要以下字段:
<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 :(得分:0)
你可以试试这个
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
}