2012-08-02 67 views
0

我有下面的代码片段:分组数组元素的Groovy

<div id="bookmarks" style="height:150px;width:250px; padding-left: 100px;margin-top: -54px;font:16px/26px Georgia, Garamond, Serif;overflow:scroll;"> 
    <g:each in="${params['bookmarks'] }" var="bookmark"> 
     <p><a onclick="seek('${bookmark}');">${bookmark}</a></p> 
    </g:each> 
</div> 

然而,当我看着viewer.gsp,我看到:

0 
0 
: 
0 
4 
: 
3 
5 
, 
0 
0 
: 
1 
6 
: 
0 
0 
, 
0 
0 
: 
2 
5 
: 
0 
1 

而不是通常00:04:35应该是...我如何格式化数组$params['bookmars']返回给我正确的格式?

+0

你从你的控制器传递给这个gsp? – 2012-08-02 16:13:07

+0

我传递了一个时间字符串列表,如:“00:04:35”,“00:15:10”,“01:30:04”'代表视频中的特定时间 – cybertextron 2012-08-02 16:32:50

回答

3

params['bookmarks']会给你一个列表,多值参数,但String如果只有一个值,并null如果没有价值可言的,each超过字符串中的字符的字符串进行迭代。因此,您的bookmarks参数看起来像是一个单值参数,其值是以逗号分隔的字符串00:04:35,00:16:00,...,而不是多值参数(即表单提交像bookmarks=00:04:35&bookmarks=00:16:00&...)。

对于可能是多值的参数,您可以使用params.list('...'),这可以保证您有一个列表(根据需要包含零个,一个或多个项目)。

<g:each in="${params.list('bookmarks') }" var="bookmark"> 

但如果你坚持用逗号分隔的单个值,那么你就必须自己把它分解:

<g:each in="${params.bookmarks?.split(/,/)}" var="bookmark"> 

此外,您可能需要使用相关encodeAs...调用确保你得到有效的JavaScript和HTML:

<a onclick="seek('${bookmark.encodeAsJavaScript()}');">${bookmark.encodeAsHTML()}</a>