grails渲染复选框列表
我在网上搜索了将近一天,似乎找不到解决问题的办法。grails渲染复选框列表,grails,gorm,gsp,Grails,Gorm,Gsp,我在网上搜索了将近一天,似乎找不到解决问题的办法。 我有一个叫做Hobby的查找表,里面有很多爱好(露营、徒步旅行、骑自行车等等)。在引导过程中填充嗜好表。Grails创建了一个带有id和描述字段的嗜好表 我有一个名为“申请者”的域对象。申请人可以没有或有更多的业余爱好。我已经这样声明了域: class Applicant { static hasMany = [hobbies:Hobby] List <Hobby> hobbies = LazyList.decorate(
我有一个叫做Hobby的查找表,里面有很多爱好(露营、徒步旅行、骑自行车等等)。在引导过程中填充嗜好表。Grails创建了一个带有id和描述字段的嗜好表 我有一个名为“申请者”的域对象。申请人可以没有或有更多的业余爱好。我已经这样声明了域:
class Applicant {
static hasMany = [hobbies:Hobby]
List <Hobby> hobbies = LazyList.decorate(new ArrayList(), FactoryUtils.instantiateFactory(Hobby.class));
<g:each var="item" in="${Hobby.list()}" status="i">
<g:set var="newline" value="${(i % 3) == 0 ? 'newline' : ''}" />
<div class="formcheckbox columns3 ${newline}">
<g:checkBox name="hobbies_${item.id}" optionKey="id" value="${item.id}" />
<label>${item.description}</label>
</div>
</g:each>
一切正常。可能有更好的方法,我还没有做任何重构,但让它工作是一个起点。问题在于你的
GSP
。当需要对象列表时,必须为复选框保留一个标准名称:
<g:checkBox name="hobbies[$i].id" ... />
这将正确映射到您的命令列表 你能发布你的控制器吗?我通过一些额外的研究发现了它,并注意到了我遇到的异常情况。一个好的开始是谷歌搜索“复选框组”,这是我想要的,尽管我不知道这个词。然后我在这里找到了一篇关于Acegi插件示例的帖子:创建示例应用程序并查看创建用户的源代码。它处理多个复选框,并且具有许多关系。从那以后,我必须让它在我的命令对象中工作。。。
class Applicant {
static hasMany = [hobbies:Hobby]
//I removed the List <hobby>... code
...
}
class LifestyleCommand {
Set <Hobby> hobbies;
}
<g:each in="${Hobby.list()}" var="hobby">
<g:set var="checked" value="${ command?.hobbies.find{h->h.id == hobby.id } != null }" />
<g:checkBox value="${checked}" name="${ 'hobby' +'[' + hobby.id + ']'}"/>${hobby.description}</td>
</g:each>
Hobby.list().each{hobby->
if (params["hobby[${hobby.id}]"] == 'on') {
applicant.addToHobbies(hobby)
}
else if (applicant.getHobbies().contains(hobby)) {
applicant.removeFromHobbies(hobby)
}
}
<g:checkBox name="hobbies[$i].id" ... />