2012-08-02 96 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>