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