2013-04-21 69 views
0

你好,这里是我想要做的。 当用户按下链接时,它将值添加到列表或在参数内部设置。例如在第一次点击它增加了MYID = 1,则它变得/?MYID = 1 然后在一些其它链路的第二次点击它增加MYID = 25,那么它应该成为/?MYID = 1 & MYID = 25Grails增值设置里面的参数

我已经试过这样:

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

,但它只是之间进行切换/身份识别码= 1 /身份识别码= 25而不是变成/身份识别码= 1名&身份识别码= 25???

我该怎么做?

回答

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
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(',') 
+0

谢谢你,完全解决它 – 2013-04-22 02:08:58