你好,我正在努力做到这一点。 当用户按下链接时,它会向列表添加值或在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.
我该怎么做?
答案 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()
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