2014-09-23 48 views
0

這是一個初學者的問題:將json數據渲染到視圖中!斯卡拉2.2.3

我有這樣的定義Event

case class Event(id: Pk[Long], name: String, userId: Pk[Long]) 

object Event { 
    private val EventParser: RowParser[Event] = { 
    get[Pk[Long]]("id") ~ 
    get[String]("name") ~ 
    get[Pk[Long]]("userId") map { 
     case id ~ name ~ userId => Event(id, name, userId) 
    } 
    } 

    def findAll(): Seq[Event] = { 
    DB.withConnection { implicit connection => 
     SQL("select * from events").as(EventParser *) 
    } 
    } 
} 

我使它對這樣的觀點:

def events = Action { 
    val events: Seq[Event] = Event.findAll() 

    Ok(views.html.events(events)) 
    } 

但我會喜歡返回Json數據。

Json.toJson(events)無法使用,因爲事件類型爲Seq。 我沒有找到關於這個主題的好教程,我試圖按照這個答案:play framework working with json objects in Scala,但它似乎不適用於播放2.2。

所以我的問題是:你知道一個簡單的方法來在訪問數據庫後在Json中顯示一個序列的視圖嗎?

+0

是否定義'Writes'爲'Event'? – 2014-09-23 00:23:12

+0

我嘗試過但沒有成功,因爲我發現的答案不適用於遊戲! 2.2.3,你有什麼鏈接嗎? (我對Play很新!) – Simon 2014-09-23 00:28:38

+0

你是什麼意思,他們不工作?在過去的一年中,json api沒有多少變化:https://www.playframework.com/documentation/2.3.x/ScalaJsonCombinators – 2014-09-23 00:31:25

回答

3

試試這個:

import play.api.libs.json._ 

object Event { 

    ... 

    implicit def pkWrites[T : Writes]: Writes[Pk[T]] = Writes { 
    case anorm.Id(t) => implicitly[Writes[T]].writes(t) 
    case anorm.NotAssigned => JsNull 
    } 
    implicit val eventWrites = Json.writes[Event] 
} 
+0

非常感謝您的回覆,但您能否向我解釋如何將其呈現給視圖? (對不起,我很新玩,對我來說有點難...) – Simon 2014-09-23 01:56:04

+0

只需使用Json.toJson(活動)。 Scala會發現將事件轉換爲JSON的隱式寫入(並將使用它來構建Seq [Event]寫入)。 – 2014-09-23 08:01:39