2013-07-08 29 views
2

我試圖將一個InfoObject對象列表發送給我的控制器。我需要指定路由文件。 我知道如何發送int,字符串和參數長,但如何列表<>?在Java Play Framework 2中,作爲參數的列表<>的路由

我試過這個,但它不工作,我會得到一個錯誤消息,說「找不到:輸入Infoobject」。

GET /generateExcel     controllers.Application.generateExcel(list:List[Infoobject]) 

謝謝!

+0

我認爲在概念上是錯誤的方法..你試圖通過URL發送一個重對象列表!真奇怪。你會更好地將它們存儲在一個POST中 – cjds

+0

@Kugen方法總的來說,它是一個抽象,你從get請求中得到的不應該是像String這樣的基本類型。 –

回答

3

首先,我認爲你需要把你的對象的包放在列表的[]中: List[path.of.your.package.Infoobject](你的路由沒有導入)。

無論如何,我認爲你只能在URL中放置字符串和數字,以便將參數發送到你的控制器。

1RST解決方法:您可以創建一個QueryStringBindable結合你的對象(List[Infoobject])爲一個字符串,這樣通過URL發送一個字符串的信息由控制器列表[遍歷infoObject]恢復。

第二個解決方法:您可以發送字符串,可以幫助你重新創建列表中你控制器(如果你在數據庫中查詢例如,或者如果它是對象的名單,只包含字符串屬性)

這裏對於QueryStringBindable的Java文檔:http://www.playframework.com/documentation/api/2.1.1/java/play/mvc/QueryStringBindable.html

+0

此問題與[此問題](http://stackoverflow.com/questions/17482984/play-framework-controller-action-runs-every-load)和第一個答案有關。如果這是做錯的方式,請嘗試回答我鏈接的問題。 – Kungen

0

路由不被傳遞複雜的對象最好的地方,而不是傳遞一個List(如在其他答案/評論指出還),你會做通過發送一個逗號分隔的列表更好對象的ID保存在數據庫中。請記住,在很多地方你可以打牆,即。查詢長度的限制等等。

如果你不能/不想在數據庫中保存它們,你也可以使用Cache API來存儲請求之間的內存中的整個列表,這樣你就可以在url中發送緩存項的ID作爲普通的String

+0

請看我上面的評論。 – Kungen