Grails:通过父对象关联子对象列表中的对象
我有三个目标Grails:通过父对象关联子对象列表中的对象,grails,gsp,Grails,Gsp,我有三个目标 class Registrant { String firstName String lastName List<EventRegistration> events = [].withLazyDefault { new EventRegistration() } static hasMany = [ events: EventRegistration ] } class EventRegistration { static belo
class Registrant {
String firstName
String lastName
List<EventRegistration> events = [].withLazyDefault { new EventRegistration() }
static hasMany = [
events: EventRegistration
]
}
class EventRegistration {
static belongsTo = [ registrant : Registrant ]
Event event
Integer numberOfTickets
}
class Event {
String title
}
这并不能节省时间。有没有办法将事件与EventRegistration关联,以便注册人可以保存它?因为控制器中绑定的范围是注册人,所以不需要在events元素前面加上注册人。从你的标签上移除它,绑定就可以了
<table>
<thead>
<tr>
<th>Title</th>
<th># of Tickets</th>
</tr>
</thead>
<tbody>
<g:each var="event" in="${Event.list()}" status="s">
<tr>
<td>${event.title}</td>
<td><g:field type="text" name="events[${s}].numberOfTickets"/>
<g:field type="hidden" name="events[${s}].event.id" value="${event?.id}"/></td>
</tr>
</g:each>
</tbody>
</table>
标题
#票的数量
${event.title}
您的控制器代码是什么样子的?您可能不需要注册人。在您的域名称中。添加控制器代码请尝试删除注册者。在标记名中。这很有效。。。你想作为我可以接受的答案提交吗?是的,作为答案添加了它。作为一个旁注,您应该考虑将事件.List.()移到控制器中,并将其传递到模型中。最好在控制器中和视图外继续构建模型。
@Transactional(readOnly = true)
class RegistrantController {
def index() {
}
def load(Registrant registrant){
render(view: "load", model:[registrant:registrant])
}
@Transactional
def save(Registrant registrant) {
println registrant?.events
if (registrant == null){
flash.message = "registrant.save.not.found"
render view:'index'
return
}
if (registrant.hasErrors()) {
flash.message = "registrant.save.errors"
render view:'index', model:[registrant:registrant]
return
}
if (registrant.save(flush:true)) {
redirect action: "load", id:registrant.id
}
else {
flash.message = "registrant.save.errors"
render view:'index', model:[registrant:registrant]
return
}
}
}
<table>
<thead>
<tr>
<th>Title</th>
<th># of Tickets</th>
</tr>
</thead>
<tbody>
<g:each var="event" in="${Event.list()}" status="s">
<tr>
<td>${event.title}</td>
<td><g:field type="text" name="events[${s}].numberOfTickets"/>
<g:field type="hidden" name="events[${s}].event.id" value="${event?.id}"/></td>
</tr>
</g:each>
</tbody>
</table>