Grails索引参数 [英] Grails indexed parameters

查看:249
本文介绍了Grails索引参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 Team 具有整型种子属性的对象列表。我想以单一形式一次编辑所有队伍的种子。我很确定说Grails支持索引参数,但是我无法实现它。



这是我拥有的,而且它但我正在跳过太多的箍环,这会有更好的方式。



gsp:

 < g:form action =setSeeds> 
...
< input type =hiddenname =teams [$ {i}] .idvalue =$ {team.id}>
< input type =textsize =2name =teams [$ {i}]。seedvalue =$ {team.seed}>
< / g:每个>
< / g:表格>

控制器:

  def setSeeds = {
(0 ..< 30).each {i - >
def team = Team.get(Integer.parseInt(params [teams [$ {i}] .id]))
team.seed = Integer.parseInt(params [teams [$ { i}]。seed])
}
redirect(action:list)
}

这不是很糟吗?噪音太大。我该如何做些什么:

  params.teams.each {t  - > 
def team = Team.get(t.id)
team.seed = t.seed
}

也就是说,如何映射名为 team [0] .seed team [0]的参数。 id team [1] .seed team [1] .id 列表?



Stripes 中,您可以拥有列表<团队> 属性,它将会正常工作。我希望Grails不会少! ; - )



预先感谢您的帮助。 我终于想出了如何在没有任何诡计的情况下做到这一点。



忘掉隐藏的参数并在seed参数中使用团队ID。在GSP中:

 < g:form action =setSeeds> 
...
< input type =textsize =2name =teams.seeds。$ {team.id}
value =$ {team.seed}>
< / g:每个>
< / g:表格>

然后,在控制器中:

  params.teams.seeds.each {teamId,seed  - > 
def team = Team.get(teamId.toInteger())
team.seed = seed.toInteger()
team.save()
}
重定向行动:列表)

像一个魅力一样。


I have a list of Team objects that have an Integer seed property. I want to edit all the teams' seeds at once, in a single form. I'm sure that Grails supports indexed parameters, but I can't get it to work.

Here is what I have, and it works but I'm jumping through way too many hoops and there's gotta be a better way.

gsp:

<g:form action="setSeeds">
...
  <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:form>

controller:

def setSeeds = {
  (0..<30).each { i ->
    def team = Team.get(Integer.parseInt(params["teams[${i}].id"]))
    team.seed = Integer.parseInt(params["teams[${i}].seed"])
  }
  redirect(action:list)
}

Isn't that awful? Way too much noise. How can I do something along the lines of:

params.teams.each { t ->
  def team = Team.get(t.id)
  team.seed = t.seed
}

That is, how do I map params named team[0].seed, team[0].id, team[1].seed, team[1].id to a List?

In Stripes you can just have a List<Team> property and it will just work. I expect no less from Grails! ;-)

Thanks in advance for your help.

解决方案

I finally figured out how to do this without any shenanigans.

Forget about the hidden parameter and just use the team ID in the seed parameter. In the GSP:

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

Then, in the controller:

params.teams.seeds.each { teamId, seed ->
  def team = Team.get(teamId.toInteger())
  team.seed = seed.toInteger()
  team.save()
}
redirect(action:list)

Works like a charm.

这篇关于Grails索引参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆