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

时间:2018-05-28 06:04:59

标签: 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 registrations after data binding
   cmd.ids.each {

    }
}


//Command Object
class EmailCommand {
  List<Registration> ids
}

我想将传递给控制器​​的所有ID绑定到EmailCommand命令对象中的id列表。我怎样才能实现它?我感谢任何帮助!谢谢!

3 个答案:

答案 0 :(得分:2)

这就像是

<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>

答案 1 :(得分:1)

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

后才能使其工作
class EmailCommand{

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

}

并按照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的限制吗?

答案 2 :(得分:0)

这里有2个选项:

直接前进 - &gt;使用&#34; setter&#34;:

中的逗号分隔字符串进行操作
class EmailCommand {
  List<Registration> ids
  void setIds( String val ){ ids = Registration.getAll( val.split( ', ' ) ) }
}

正确 - &gt;使用形式参数:

<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做绑定。