2016-01-01 21 views
0

我正在使用Slick 3 + Play Framework和Scala。我不知道爲什麼我的Play模板沒有渲染我第一次從Slick DB調用中獲得的數據。當我再次刷新同一頁面時,它會顯示數據,但無法第一次渲染。未呈現的活躍光滑未來響應播放模板

這裏是我的代碼,

油滑DB電話:

def findByAccessToken(Id: String): Future[Option[Organization]] = 
db.run(orgs.filter(_.Id=== Id).result.headOption) 

控制器動作召喚:

def getOrgInfo = Action.async { request => 

val maybeOrg = for { 
    org <- orgDAO.findByAccessToken(request.session.get("oauthAccessToken").get) 
} yield org 

maybeOrg.map { 
    case org => 
    org match { 
     case Some(c) => Ok(views.html.account(c)) 
     case None => NotFound 
    } 
} 

和最終播放模板代碼:

@(Org: Organization) 
@container("Org Info") { 

<h1>Org Information</h1> 

<ul> 

    <li> 
     User Id: @Org 
    </li> 
</ul> 

} 

看起來像當第一次我的頁面加載在那個時候數據庫調用還沒有交付的結果,但因爲當我刷新它顯示數據。

如何處理這種情況並第一次呈現數據?

謝謝

回答

0

也許這和模板沒有任何關係。你可以添加一些調試語句來驗證。第一個請求被解僱的時候,也許這個令牌不存在?

+0

我認爲這不是問題。當我在findByAccessToken方法內打印我的「Id:String」值時,我得到了它的值。不知道它爲什麼奇怪? – Nishan

+1

嗨@nemoo,你是部分正確的。我發現的確切問題是,當我調用上方的「findByAccessToken」方法時,我來自Action.Async操作控制器並重定向到此頁面。所以可能是頁面加載系統無法獲取Id並返回空白值的第一次。所以爲了解決這個問題,我已經解決了以前的方法,並且只有當我成功地結束了未來的迴應時才轉發到這個頁面。 – Nishan