代码之家  ›  专栏  ›  技术社区  ›  kofhearts

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

  •  0
  • kofhearts  · 技术社区  · 6 年前

    <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命令对象中的ids列表。我怎样才能做到呢?谢谢你的帮助!谢谢!

    3 回复  |  直到 6 年前
        1
  •  3
  •   bassmartin    6 年前

    会是什么样子的

    <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>
    
        2
  •  1
  •   kofhearts    6 年前

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

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

    并按照巴斯马丁的建议,考虑以下几点。

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

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

        3
  •  0
  •   injecteer    6 年前

    这里有两个选项:

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

    class EmailCommand {
      List<Registration> ids
      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来做绑定。

    推荐文章