Grails在Params中添加值

时间:2013-04-21 10:28:22

标签: grails grails-2.0

你好,我正在努力做到这一点。 当用户按下链接时,它会向列表添加值或在params中设置。例如,在第一次单击时,它会添加myId = 1,然后它变为/?myId = 1 然后在第二次点击其他链接时,它会添加myId = 25然后它应该变为/?myId = 1& myId = 25

我试过这个:

<g:link action="test" params="${params+['myId':'1']}"> first</g:link>
<g:link action="test" params="${params+['myId':'25']}"> second</g:link>

但它只是在/?myId = 1或/?myId = 25之间切换,永远不会变成/?myId = 1&amp; myId = 25.

我该怎么做?

2 个答案:

答案 0 :(得分:1)

那是因为您尝试将密钥myId添加到params。由于它已经有密钥,因此值会更新。

您可以使用,之类的内容来保留您的值,只需一个键即可。

<g:link action="test" params="${params.myId ? [myId: params.myId+',1'] : [myId:1]}"> first</g:link>
<g:link action="test" params="${params.myId ? [myId: params.myId+',15'] : [myId:15]}"> second</g:link>

在您的控制器中,您可以使用tokenize()

在列表中转换myId
println params.myId.tokenize(',')

答案 1 :(得分:0)

找到了其他可能的解决方案。下行是列表或集合必须有一个可以忽略的虚拟值。例如0。

<g:link action="test" params="${['ids': (params.ids as Set) + 'ab' ]}"> + ab</g:link> <br>
<g:link action="test" params="${['ids' :  (params.ids as Set) + 'cd' ]}"> + cd</g:link> <br>

在控制器中:

if(!params.ids || params.ids?.size()==1) params.ids= [0]
使用了

as Set,因为不需要重复值。
我在(列表或集合)中使用虚拟值的原因是,当第一个值有两个或更多个字符时,它会分开分离。例如,如果第一次按下“+ ab”链接,则变为[a,b]而不是[ab]。然后,如果再次按下它,则变为[a,b,ab],这不是期望的结果。但是当它已经有0时,它变为[0,ab]。稍后在控制器0中可以忽略。

<小时/> 如果需要删除值,可以使用:

<g:link action="test" params="${['ids' :  params.ids - ['ab']]}"> - ab</g:link> <br>
<g:link action="test" params="${['ids' :  params.ids - ['cd']]}"> - cd</g:link> <br>
Answered my own question just in case another noobie like me has come across same problem