Grails在一个表单上使用两个域实现一对多
我是Grails&Groovy的新手。我试图从两个域类创建一个表单,但它并没有更新两个域 1) 我的域类是:a) (b) 2) 我的控制器(UserController)逻辑是:Grails在一个表单上使用两个域实现一对多,grails,Grails,我是Grails&Groovy的新手。我试图从两个域类创建一个表单,但它并没有更新两个域 1) 我的域类是:a) (b) 2) 我的控制器(UserController)逻辑是: def createalert() { if (request.method == "POST") { def user = new User(params) if (user.validate()) { user.save() flash.message = "Su
def createalert() {
if (request.method == "POST") {
def user = new User(params)
if (user.validate()) {
user.save()
flash.message = "Successfully Created User"
redirect(uri : '/User/createalert')
} else {
flash.message = "Error Creating User"
return [ user : user]
}
}
}
3) createalert.gsp视图类:
<g:form action="createalert">
<fieldset class="form">
<div class="fieldcontain required">
<label for="loginId">Login ID</label>
<g:textField name="loginId" value="${user?.loginId}"/>
</div>
<div class="fieldcontain required">
<label for="alerts.email"> Email address:</label>
<g:textField name="alerts.email"
value="${user?.alerts?.email}"/>
</div>
<div class="fieldcontain required">
<label for="alerts.name">Name & Title:</label>
<g:textField name="alerts.name"
value="${user?.alerts?.name}"/>
</div>
<div class="fieldcontain required">
<label for="alerts.startdate">Start Date Notice:</label>
<g:datePicker name="alerts.startdate" value="${new Date()
}" precision="day" />
</div>
<div class="fieldcontain required">
<label for="alerts.enddate">End Date Notice:</label>
<g:datePicker name="alerts.enddate" value="${new Date() }"
precision="day" />
</div>
<div class="fieldcontain required">
<label for="alerts.starttime">(optional) St Time:</label>
<g:textField name="alerts.starttime"
value="${user?.alerts?.starttime}"/>
</div>
<div class="fieldcontain required">
<label for="alerts.endtime">(optional) E-Time:</label>
<g:textField name="alerts.endtime"
value="${user?.alerts?.endtime}"/>
</div>
<div class="fieldcontain required">
<label for="roadclose">closed 24-hours?</label>
<g:radioGroup name="roadclose"
labels = "[ 'Yes', 'No']"
values="[ 'Y', 'N' ]"
value = "Y">
${it.label} ${it.radio}
</g:radioGroup>
</div>
</fieldset>
<fieldset class="buttons">
<g:submitButton name="createalert" value="Create Alert"/>
<g:link action="createalert">Back to Create Information </g:link>
</fieldset>
登录标识
电邮地址:
姓名和职务:
开始日期通知:
截止日期通知:
(可选)St时间:
(可选)电子时间:
24小时不营业?
${it.label}${it.radio}
返回以创建信息
注意:我的问题是只创建用户域(User-loginId)信息,而Alacat没有任何信息。我希望使用createalert表单创建两个域(User和Alacat)的属性。运行时没有出现任何错误。参数映射可能如下所示:
[
loginId: 'something',
alerts: [
email: 'blah',
name: 'blah blah',
...
]
]
def user = new User(loginId: 'something', alerts: alerts)
<div class="fieldcontain required">
<label for="loginId">Login ID</label>
<g:textField name="user.loginId" value="${user?.loginId}"/>
</div>
因此,用户对象被实例化如下:
[
loginId: 'something',
alerts: [
email: 'blah',
name: 'blah blah',
...
]
]
def user = new User(loginId: 'something', alerts: alerts)
<div class="fieldcontain required">
<label for="loginId">Login ID</label>
<g:textField name="user.loginId" value="${user?.loginId}"/>
</div>
User.alerts
是一个集合,而不是地图。此外,我相信您需要调用instance.addTo*()
来添加到hasMany集合中。请尝试以下方法:
def user = new User(params)
user.addToAlerts new Alacat(params.alerts)
...
创建一个用户参数会更简洁
斯坦的回答:伊曼纽尔·罗莎, 非常感谢你的帮助。但是,我收到了新的错误消息“类[class alerts.User]的属性[loginId]不能为null”。这是我的控制器代码:
类用户控制器{ 静态脚手架=真
def createalert() {
if (request.method == "POST") {
def User user = new User(params)
if (user.validate()) {
user.addToAlerts new Alacat(params.alerts)
user.save()
flash.message = "Successfully Created User"
} else {
flash.message = "Error Creating User"
}
}
}
}参数映射可能看起来像这样:
[
loginId: 'something',
alerts: [
email: 'blah',
name: 'blah blah',
...
]
]
def user = new User(loginId: 'something', alerts: alerts)
<div class="fieldcontain required">
<label for="loginId">Login ID</label>
<g:textField name="user.loginId" value="${user?.loginId}"/>
</div>
因此,用户对象被实例化如下:
[
loginId: 'something',
alerts: [
email: 'blah',
name: 'blah blah',
...
]
]
def user = new User(loginId: 'something', alerts: alerts)
<div class="fieldcontain required">
<label for="loginId">Login ID</label>
<g:textField name="user.loginId" value="${user?.loginId}"/>
</div>
User.alerts
是一个集合,而不是地图。此外,我相信您需要调用instance.addTo*()
来添加到hasMany集合中。请尝试以下方法:
def user = new User(params)
user.addToAlerts new Alacat(params.alerts)
...
创建一个用户参数会更简洁
斯坦的回答:伊曼纽尔·罗莎, 非常感谢你的帮助。但是,我收到了新的错误消息“类[class alerts.User]的属性[loginId]不能为null”。这是我的控制器代码:
类用户控制器{ 静态脚手架=真
def createalert() {
if (request.method == "POST") {
def User user = new User(params)
if (user.validate()) {
user.addToAlerts new Alacat(params.alerts)
user.save()
flash.message = "Successfully Created User"
} else {
flash.message = "Error Creating User"
}
}
}
}它看起来像这样:
[
loginId: 'something',
alerts: [
email: 'blah',
name: 'blah blah',
...
]
]
def user = new User(loginId: 'something', alerts: alerts)
<div class="fieldcontain required">
<label for="loginId">Login ID</label>
<g:textField name="user.loginId" value="${user?.loginId}"/>
</div>
}
非常感谢您的快速回复。看起来是这样的:
[
loginId: 'something',
alerts: [
email: 'blah',
name: 'blah blah',
...
]
]
def user = new User(loginId: 'something', alerts: alerts)
<div class="fieldcontain required">
<label for="loginId">Login ID</label>
<g:textField name="user.loginId" value="${user?.loginId}"/>
</div>
}
非常感谢您的快速响应。loginId字段为空,因为UserController信息应该是新用户(params.User),而不是新用户(params)。我是说问题出在我的用户控制器上
非常感谢艾曼纽的帮助。非常感谢。loginId字段为空,因为UserController信息应该是新用户(params.User),而不是新用户(params)。我是说问题出在我的用户控制器上
非常感谢艾曼纽的帮助。非常感谢。艾曼纽·罗莎,非常感谢你的帮助。但是,我收到错误消息“类[class edu.psu.opp.alerts.User]的属性[loginId]不能为空”。好的,请继续,将更新的代码添加到您的问题中。Emmanuel Rosa,非常感谢您的帮助。但是,我收到了错误消息“类[class edu.psu.opp.alerts.User]的属性[loginId]不能为null”。这是我的控制器代码:class UserController{static scaffold=true def createalert(){if(request.method==“POST”){def User User=new User(params)if(User.validate()){User.addToAlerts new Alacat(params.alerts)User.save()flash.message=“Successfully Created User”}else{flash.message=“Error Creating User”}}}}您的loginId
是什么样子的?Emmanuel,我正在尝试在我的应用程序上运行一个测试单元,出现以下错误。可能是我没有正确设置它。它位于相同的域上。Emmanuel Rosa,非常感谢您的帮助。但是,我收到了此错误消息“类[class edu.psu.opp.alerts.User]的属性[loginId]不能为null”。好的,请继续向您的问题添加更新的代码。Emmanuel Rosa,非常感谢您的帮助。但是,我收到了错误消息“类[class edu.psu.opp.alerts.User]的属性[loginId]不能为null”。这是我的控制器代码:class UserController{static scaffold=true def createalert(){if(request.method==“POST”){def User User User=new User(params)if(User.validate()){User.addToAlerts new Alacat(params.alerts)User.save()flash.message=“成功创建用户”}else{flash.message=“错误创建用户”} } } }你的loginId
是什么样子的?Emmanuel,我正试图在我的应用程序上运行一个测试单元,我得到了下面的错误。也许,我没有正确设置它。它在相同的域上。啊!我正要告诉你。太好了,我很高兴你让它工作:)非常感谢!我真的很感谢你的帮助。啊!我正要告诉你帽子。太好了,我很高兴你把它修好了:)非常感谢!我真的很感谢你的帮助。