2014-03-13 45 views
1

我是新來的Scala和玩。玩框架2工作與Request.session價值沒有行動功能

我想從視圖中調用一個控制器func,但我不想返回結果類型。 我想要做的是修改Request.session值。

我做的方法是:1)的情況下

1)的情況下

控制器:

def func(id : Int)(implicit request: RequestHeader) = { ... } 

路線:

GET /cart/cancel/:id controllers.ProductController.func(id:Int) 

但它給了我一個編譯錯誤:在這裏找不到任何HTTP請求標題

所以我做的另一種方法2)的情況下

2)情況下

控制器:

def func(id : Int) = Action { implicit request => ... Ok()} 

是。有效。但是這次我返回了Result類型。 所以我有義務改變頁面的狀態

有沒有辦法處理沒有動作功能的會話值(沒有狀態轉換)?

謝謝!

回答

0

您可以使用情況2,做一些事情,如:

Ok().withSession(
    session - "id" + ("id" -> "newID") 
) 

然後,您可以通過Ajax調用你的控制器,例如,你的會話中的變化將被考慮在內,則可以應用更改到UI(如果有的話),一旦你從你的控制器獲得Ok狀態。如果沒有明顯的變化,那麼你可以在那裏停下來,所有以下與應用程序的交互將使用這個新的會話。

+0

如何在不返回'Result'的情況下做到這一點?我的意思是我怎樣才能完成**案例1)**沒有錯誤? – Augusto

+0

基本上,你不能,控制器是獲取請求並返回響應的東西,而且這個響應必須是有效的響應。意思是,控制器必須返回Ok,NotFound ...這是控制器的定義。在Play中,您必須將控制器定義爲某種Action,並且此操作將傳遞一個返回Result的函數。底線,你只能使用案例2. – Peter

+0

好吧,你說這是一個控制器的定義,我一直在尋找你說的話,但我沒有找到任何讚揚的消息來源聲稱。你能爲我提供一個來源嗎? – Augusto