0

你好,这是我想要做的。当用户按下链接时,它会向列表添加值或在参数中设置。例如,在第一次点击时它添加 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&myId=25。

我该怎么做呢?

4

2 回答 2

1

那是因为您正在尝试将密钥添加myIdparams. 由于它已经拥有密钥,因此值已更新。

你可以用类似的东西来分隔你的值,,剩下一个键。

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

在您的控制器中,您可以将 myId 转换为列表tokenize()

println params.myId.tokenize(',')
于 2013-04-21T19:45:58.420 回答
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>
回答我自己的问题,以防万一像我这样的菜鸟遇到同样的问题
于 2013-04-22T03:38:16.843 回答