Grails索引参数

Grails索引参数,grails,properties,indexed,Grails,Properties,Indexed,我有一个团队对象列表,这些对象具有整数种子属性。我想一次编辑所有团队的种子,以单一形式。我确信Grails支持索引参数,但我无法让它工作 这就是我所拥有的,它是有效的,但我已经跳过了太多的障碍,必须有更好的方法 普惠制: 也就是说,如何将名为团队[0].seed,团队[0].id,团队[1].seed,团队[1].id的参数映射到列表 在中,您只需拥有一个列表属性,它就可以正常工作。我对圣杯的期望不会降低!;-) 提前感谢您的帮助。不确定这是否有帮助,但您可以使用一个闭包,如: <g:ea

我有一个
团队
对象列表,这些对象具有
整数种子
属性。我想一次编辑所有团队的种子,以单一形式。我确信Grails支持索引参数,但我无法让它工作

这就是我所拥有的,它是有效的,但我已经跳过了太多的障碍,必须有更好的方法

普惠制:

也就是说,如何将名为
团队[0].seed
团队[0].id
团队[1].seed
团队[1].id
的参数映射到列表

在中,您只需拥有一个
列表
属性,它就可以正常工作。我对圣杯的期望不会降低!;-)


提前感谢您的帮助。

不确定这是否有帮助,但您可以使用一个闭包,如:

<g:each in="${teams}">
     <p>id: ${it.id}</p>
     <p>seed: ${it.seed}</p>
</g:each>

id:${it.id}

种子:${it.seed}


您可能可以从这个输出html的安装中构建一个列表。或者用它构建表单。

params
不仅仅是一个常规映射,它是一个
grailParameterMap
,它根据参数名称按“.”拆分自动构建子映射结构。您可以通过使用以下gsp来利用这一优势:

<g:form action="seed">
 <g:each in="${teams}" status="i" var="team">
   <input type="hidden" name="teams.${i}.id" value="${team.id}">
   <input type="text" size="2" name="teams.${i}.seed" value="${team.seed}">
  </g:each>
 <g:submitButton name="update" value="Update" />
</g:form>
第一个操作
findAll
过滤掉所有带点的参数。其余的是一个包含
k
中的行id以及
v
中的
id
seed
的映射图


我希望这能回答你的问题。

我终于想出了在没有任何恶作剧的情况下如何做到这一点

忘记隐藏参数,只需在种子参数中使用团队ID。在普惠制中:

<g:form action="setSeeds"> 
... 
  <g:each in="${teams}" var="team"> 
    <input type="text" size="2" name="teams.seeds.${team.id}"
      value="${team.seed}"> 
  </g:each> 
</g:form> 
工作起来很有魅力。

2015年。。。。 Grails现在的工作方式有点不同,您可能会发现自己遇到了字符串,而不是预期的子映射。通过执行
类似于

params.nested.each{
               if(!it.getKey().contains('.')){
                 //to get a map rather than a string...    
                  params.nested[it.getKey()];
               }
           };
编辑:顺便说一下…

具有相同名称的输入,如

  <input name="item.choice" type="checkbox" value="3" />
  < input name="item.choice" type="checkbox" value="4"/>
如果只提交了一个项目,它将抛出一个错误。解决这个问题的一个好办法是

 ([]+(params['item.choice']?:[])).each{
         def item=Item.get(it)
 } 

如果设置了参数而不是列表,则将值放入空列表中;如果设置了参数和列表,则加号运算符会将所有单个值添加到空列表中;如果未设置该参数,它将同时添加两个空列表,这将创建一个空列表。

我已经在使用闭包构建表单。问题是,如何检索控制器中的索引参数以构建列表?我想知道是否有其他人在使其工作时遇到问题。使用Grails1.3.4,我得到的不是预期的子映射,而是子映射的字符串表示形式。例如,params.toString()“[filters.1.value:123,filters:[“1”:[“value”:“123”],“1.value”:“123”],“action:list,controller:user]”是的,我在2015年遇到了各种各样的麻烦。grails现在似乎以字符串的形式返回所有参数值,这使得“maplist”字符串与多年前的bcowdery一样毫无用处。你知道为什么会这样吗?为什么嵌套子贴图被破坏?
<g:form action="setSeeds"> 
... 
  <g:each in="${teams}" var="team"> 
    <input type="text" size="2" name="teams.seeds.${team.id}"
      value="${team.seed}"> 
  </g:each> 
</g:form> 
params.teams.seeds.each { teamId, seed ->
  def team = Team.get(teamId.toInteger())
  team.seed = seed.toInteger()
  team.save()
}
redirect(action:list)
params.nested.each{
               if(!it.getKey().contains('.')){
                 //to get a map rather than a string...    
                  params.nested[it.getKey()];
               }
           };
  <input name="item.choice" type="checkbox" value="3" />
  < input name="item.choice" type="checkbox" value="4"/>
   <input name="item.choice" type="checkbox" value="3" checked />
   < input name="item.choice" type="checkbox" value="4" checked/>
     <input name="item.choice" type="checkbox" value="3" checked />
     < input name="item.choice" type="checkbox" value="4" />
  params['item.choice'].each{
          def item=Item.get(it)
  }
 ([]+(params['item.choice']?:[])).each{
         def item=Item.get(it)
 }