路由 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