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" ... />