Play Framework1.4 學習筆記 Route和Controller

路由 Route

  • route文件中的先後順序代表了路由生效的先後順序
  • /user 匹配 /user 但不匹配 /user/
  • 可以用404做路由 GET /ignore 404

根據某些參數更具體的路由

public static void page(String id) {
    Page page = Page.findById(id);
    render(page);
}

 想爲id爲home的頁面定義URL別名,可以這樣設置
GET /home Application.page(id:‘home’)
 GET /pages/{id} Application.page

 當id爲home時,這兩個路由同時生效,但第一個在前面,所以優先級更高

設置內容類型

  GET /index.xml Application.index(format:‘xml’)
 其他類型同理

控制器Controller

創建

 命名:模型名+s,如Users,繼承 Controller

檢索Http參數

  1. 使用params String id = params.get(“id”)
  2. 直接從方法中取
    /clients?id=1
    public static void show(String id)
    public static void show(Long id)

    這兩個都可以取到值,play會嘗試類型轉換
  3. 可以使用 @As 註釋來指定日期格式
    fun(@As(“dd/MM/yyyy”) Date from)
  4. 上傳文件
public static void create(String comment, File attachment) {
    String s3Key = S3.post(attachment);
    Document doc = new Document(comment, s3Key);
    doc.save();
    show(doc.id);
}
  1. POJO 對象綁定
    方法使用pojo對象來接收 **fun(User user) **
    頁面的傳參爲 user.sex, user.age

結果類型

  • render(…) 方法發出一個 Result 對象並停止方法的執行
  • renderText(…) 將結果直接顯示在頁面上
  • renderJSON(…) 返回JSON字符串
  • renderXml(…) 返回Xml字符串
  • renderBinary(…) 返回二進制內容,例如生成驗證碼,下載文件
  • 重定向 redirect(…)

攔截

  • @Before 在該 Controller 方法執行之前,執行帶有 @Before 註解的方法
  • @Before(unless=“login”) 表示 login 方法不攔截
  • @Before(only={“login”,“logout”}) 表示只攔截 login 和 logout
  • @After 表示在 Controller 每次調用之後執行
  • @Catch 表示發生異常時執行,可以有多個,然後用 value 屬性來指定不同異常時的處理
  • @Finally 表示每次調用後都會執行,無論成功與否
  • 在Controller上添加 @With(xx.class) 來集成xx的攔截規則

會話和Flash作用域

  • session

參考官方文檔 https://www.playframework.com/documentation/1.4.x/home

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章