2013-07-02 54 views
2

我需要訪問存儲在參數中的項目,該參數表示多選中的選定元素。我經過選擇的項目從GSP用下面的代碼到控制器到remoteFunction:grails控制器:訪問具有元素列表的參數

params: '\'receiptItemsSelected=\' + jQuery(this).val()' 

現在,在討論here發現,我用封閉來獲得每個值的代碼之後,但如果我進行多選時,大小receiptItemsSelected始終爲1,但數值爲,例如,1,2。爲了獲得作爲一個列表我做的值在控制器

params.list("receiptItemsSelected") 

以下,但它並沒有給我兩個元素,如果我選擇在多選兩個項目,但總是一個元素。 現在的問題是:如果我選擇兩個元素,我如何獲取每個元素並在控制器中使用它?我怎麼能把這些元素當作Long而不是String? 感謝

回答

5

如果你參數正在與一個列表的字符串表示,例如通過:

http://yoursite.com/?receiptItemsSelected=1,2,3 

您可以選擇使用Groovy的正常字符串操作分裂的價值和自己進行類型轉換:

def receiptsAsLongs = params.receiptItemsSelected.split(',')*.toLong() 

如果你的參數與參數重複的約定通過使一個列表,例如:

http://yoursite.com/?receiptItemsSelected=1&receiptItemsSelected=2 

然後Grails能夠將此轉換爲你使用params.list()的列表,但你必須做最後的StringLong轉換:

def receiptsAsLongs = params.list('receiptItemsSelected')*.toLong() 
+0

與拆分(',')它的作品。感謝您的幫助 – FrancescoDS

+0

這將在唯一一個項目選擇的情況下工作? – Rafael

+0

params.list將1個項目轉換爲列表,但不會有逗號,因此receipttsAsLongs.each {... – Vahid

0

params.list()適用於多值參數,即如果你有

receiptItemsSelected=1&receiptItemsSelected=2 

,將工作可能無法使用serialize()更多的運氣,而不是val()建立請求主體。

+0

如果我使用序列化(),而不是VAL()我只獲得一個價值,而不是全部價值;此外,這些值就像'value = 1',但我只需要'1',因爲是我用來計算的元素的id。 – FrancescoDS

相關問題