如何将ID列表绑定到grails中的命令对象?

如何将ID列表绑定到grails中的命令对象?,grails,groovy,data-binding,grails-2.2,command-objects,Grails,Groovy,Data Binding,Grails 2.2,Command Objects,比如说,当您提交表单时,它会发送一个ID列表 <form action="/process"> <input type="hidden" name="ids" value="4, 6, 10, 14, 20, 56" > <input type="submit" value="Submit"> </form> 在控制器端 def process(EmailCommand cmd){ //now iterating over regis

比如说,当您提交表单时,它会发送一个ID列表

<form action="/process">
<input type="hidden" name="ids" value="4, 6, 10, 14, 20, 56" >
<input type="submit" value="Submit">
</form>

在控制器端

def process(EmailCommand cmd){

   //now iterating over registrations after data binding
   cmd.ids.each {

    }
}


//Command Object
class EmailCommand {
  List<Registration> ids
}
def进程(EmailCommand cmd){
//现在在数据绑定后对注册进行迭代
cmd.ids.each{
}
}
//命令对象
类EmailCommand{
列表ID
}

我想将传递给控制器的所有ID绑定到EmailCommand对象中的ID列表。我怎样才能做到呢?谢谢你的帮助!谢谢

这里有两个选项:

直接->在“setter”中使用分隔逗号分隔字符串的技巧:

class命令{
列表ID
void setIds(String val){ids=Registration.getAll(val.split(','))}
}
更正->使用表单参数:

<form action="/process">

<g:each in="[4, 6, 10, 14, 20, 56]" var="id">
  <input type="hidden" name="ids" value="${id}" >
</g:each>
<input type="submit" value="Submit">
</form>


让grails进行绑定。

这里有两个选项:

直接->在“setter”中使用分隔逗号分隔字符串的技巧:

class命令{
列表ID
void setIds(String val){ids=Registration.getAll(val.split(','))}
}
更正->使用表单参数:

<form action="/process">

<g:each in="[4, 6, 10, 14, 20, 56]" var="id">
  <input type="hidden" name="ids" value="${id}" >
</g:each>
<input type="submit" value="Submit">
</form>


让grails进行绑定。

这将类似于

<form action="/process">
    <input type="hidden" name="ids[0].id" value="4" >
    <input type="hidden" name="ids[1].id" value="6" >
    <input type="hidden" name="ids[2].id" value="10" >
    <input type="hidden" name="ids[3].id" value="14" >
    <input type="hidden" name="ids[4].id" value="20" >
    <input type="hidden" name="ids[5].id" value="56" >
    <input type="submit" value="Submit">
</form>

或者,如果您想要更具活力的东西:

<form action="/process">
    <g:each in="[4, 6, 10, 14, 20, 56]" var="id" status="i">
        <input type="hidden" name="ids[${i}]" value="${id}" >
    </g:each>
    <input type="submit" value="Submit">
</form>

可能是这样的

<form action="/process">
    <input type="hidden" name="ids[0].id" value="4" >
    <input type="hidden" name="ids[1].id" value="6" >
    <input type="hidden" name="ids[2].id" value="10" >
    <input type="hidden" name="ids[3].id" value="14" >
    <input type="hidden" name="ids[4].id" value="20" >
    <input type="hidden" name="ids[5].id" value="56" >
    <input type="submit" value="Submit">
</form>

或者,如果您想要更具活力的东西:

<form action="/process">
    <g:each in="[4, 6, 10, 14, 20, 56]" var="id" status="i">
        <input type="hidden" name="ids[${i}]" value="${id}" >
    </g:each>
    <input type="submit" value="Submit">
</form>

我只能在将命令对象更改为

class EmailCommand{

    List<Registration> ids=  ListUtils.lazyList([], { new Registration() } as Factory )

}
class命令{
List id=ListUtils.lazyList([],{new Registration()}作为工厂)
}
并按照bassmartin的建议查看以下内容

<g:hiddenField name="ids[0].id" value="1"></g:hiddenField>
<g:hiddenField name="ids[1].id" value="2"></g:hiddenField>
<g:hiddenField name="ids[2].id" value="3"></g:hiddenField>
<g:hiddenField name="ids[3].id" value="4"></g:hiddenField>
<g:hiddenField name="ids[4].id" value="5"></g:hiddenField>


<g:submitButton name="submit" value="submit"></g:submitButton>



我想知道为什么命令对象中的空列表不起作用。这是grails 2.2版的限制吗?

我只能在将命令对象更改为

class EmailCommand{

    List<Registration> ids=  ListUtils.lazyList([], { new Registration() } as Factory )

}
class命令{
List id=ListUtils.lazyList([],{new Registration()}作为工厂)
}
并按照bassmartin的建议查看以下内容

<g:hiddenField name="ids[0].id" value="1"></g:hiddenField>
<g:hiddenField name="ids[1].id" value="2"></g:hiddenField>
<g:hiddenField name="ids[2].id" value="3"></g:hiddenField>
<g:hiddenField name="ids[3].id" value="4"></g:hiddenField>
<g:hiddenField name="ids[4].id" value="5"></g:hiddenField>


<g:submitButton name="submit" value="submit"></g:submitButton>



我想知道为什么命令对象中的空列表不起作用。这就是grails 2.2版的局限性吗?

我尝试了第二种方法,但似乎不起作用。我创建了6个隐藏字段,每个字段都有相同的名称“id”,每个字段的值为1整数。当我在绑定后打印cmd.ids时,它显示空列表[]。请注意,我正在使用Grails2.2如何绑定?我尝试了第二种方法,但似乎不起作用。我创建了6个隐藏字段,每个字段都有相同的名称“id”,每个字段的值为1整数。当我在绑定后打印cmd.ids时,它显示空列表[]。请注意,我使用的是Grails2.2,您如何绑定?