Grails索引参数 [英] Grails indexed parameters
问题描述
我有一个 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屋!