2012-03-23 46 views
1

我剛剛在學習Play 2.0框架。所以我有一個非常基本的問題:我只想獲取URL參數並將其顯示在視圖中。你是怎樣做的?播放2.0:將URL參數推送到視圖

我創建的URL模式:

GET /test/:id controllers.Application.testOutput(id: Long)

而一個apporoptiate梅索德在Application

public static Result testOutput(long id) { 
     return ok(
       views.html.test.render(id) 
     ); 
} 

如何調用id變量形成的看法?我知道如何調用視圖中模型中定義的方法,但我不知道如何在視圖中顯示id變量。將id變量傳遞給render方法是否正確?

我想了解底層概念,所以對答案的詳細解釋將非常棒!

回答

2

我們的測試網址將爲http://localhost:9000/greeter?message=hello,這將輸出一個text/plain響應與參數message(即你好)的內容。首先,讓我們定義路由

GET  /greeter   controllers.Greeter.say(message: String) 

然後,創建一個Greeter控制器(我使用Java)

package controllers; 

import play.*; 
import play.mvc.*; 

// This lets you call the template without the views.html prefix 
// import views.html.*; 
import views.txt.*; 

public class Greeter extends Controller { 

    public static Result say(String message) { 
    return ok(greeter.render(message)); 
    } 

} 

你可以看到,ok()調用文件app/views/greeter.scala.txt這裏中定義的斯卡拉功能的內容該文件(第一行定義了函數

@(message: String) 
I'm the content. Note that you can place 
anything you want here. Scala expressions 
begin with the '@@' character. For example 
next line contains the content of message: 
@message 

內部使用在這種情況下我用String類型的消息參數。 txt文件擴展名,因爲我想要純文本響應。如果您想要生成HTML輸出,只需創建一個.scala.html文件

+0

感謝您的好評!拉力賽有幫助! – wowpatrick 2012-03-25 22:17:40

0

客戶端請求被the Play router,這進而將它轉發到一些動作(這是一個控制器內的方法)

GET /greeter    Greeter.say 

從播放DOC

最後處理Java路由定義的一部分是Java調用。這部分是 由操作方法的完全限定名稱定義。動作 方法必須是Controller類的公共靜態無效方法。 A 控制器類必須在控制器包中定義,並且必須 是play.mvc.Controller的子類。

如果在控制器包名下沒有直接定義 ,則可以在Controller類名稱前添加Java包。該控制器 包本身是隱含的,所以你並不需要指定它

Inside the action,您可以通過方法簽名通過param對象獲取的參數或直接:

public static void say(String what) { 
    ... 
} 

和你可以像您在示例中那樣通過render(what)將對象傳遞到模板。

最後your template可以使用${what}語法訪問這些對象。

編輯這是Play 1.x做事的方式。我沒有注意到你的標籤,但仍然希望這有助於。 Play2使用新的Scala模板引擎,here is the guide。看起來您必須在模板的開頭聲明您的參數,然後您可以通過@what語法訪問它們。這是因爲該模板現在是一個編譯好的Scala函數,所以它可以在編譯時進行類型檢查以及類似的事情。你可以通過render(what)將參數傳遞給這個函數(就像你一樣)。我個人自己並不使用Play2.0:從技術角度來看,這是一個巨大的改進,代價是不夠直觀和更加冗長。我不認爲這些簡單的項目可以從這些改進中受益

+0

將參數傳遞給'render'函數後,如何在視圖中調用該變量?你知道語法嗎? – wowpatrick 2012-03-24 21:52:19

+1

查看我的其他答案 – Raffaele 2012-03-24 22:57:49

0

In Play 2模板只是普通函數,所以您可以像調用任何函數一樣調用它們。

+0

您可以詳細介紹一下如何在模式中編寫函數以顯示URL中的變量。我只能從視圖中調用我在模型中定義的函數嗎? – wowpatrick 2012-03-24 21:53:53