路由 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參數
- 使用params String id = params.get(“id”)
- 直接從方法中取
/clients?id=1
public static void show(String id)
public static void show(Long id)
這兩個都可以取到值,play會嘗試類型轉換 - 可以使用 @As 註釋來指定日期格式
fun(@As(“dd/MM/yyyy”) Date from) - 上傳文件
public static void create(String comment, File attachment) {
String s3Key = S3.post(attachment);
Document doc = new Document(comment, s3Key);
doc.save();
show(doc.id);
}
- 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