Play可以做的5件很酷的事
綁定 HTTP 參數(shù)到 JAVA 方法參數(shù)
用 Play 框架,在 Java 代碼中獲取 HTTP 請求參數(shù)是非常簡單的,只需要聲明方法的參數(shù)名和 HTTP 請求的參數(shù)名一樣就可以了。
例如,這個請求:
- /articles/archive?date=08/01/08&page=2
把 date 和 page 聲明為 Java 方法的傳入?yún)?shù),就可以獲取 HTTP 請求中 date 和 page 參數(shù)的值了:
- public static void archive(Date date, Integer page) {
- List<Article> articles = Articles.fromArchive(date, page);
- render(articles);
- }
Play 框架會根據(jù)聲明的 Java 參數(shù)類型,自動把 HTTP 請求參數(shù)轉(zhuǎn)換成對應的 Java 對象。
這種自動綁定也適用于 任何的 Java 對象 。
- public class Person {
- public String name;
- public Integer age;
- }
一個簡單的用于添加用戶的控制器的 action 方法可以像這樣:
- public static void add(Person p) {
- p.save();
- }
對應的 HTML 表單域使用復合的參數(shù)名:
- <form action="/Directory/add" method="POST">
- Name: <input type="text" name="p.name" />
- Age: <input type="text" name="p.age" />
- </form>
通過調(diào)用對應的 Java 方法進行重定向
Play 沒有等價于 Java Servlet forward 命令的方法,但是實現(xiàn)重定向確實非常簡單。只需調(diào)用相應的 Java 方法,Play 就會自動生成正確的重定向( HTTP Redirect )響應給客戶端。
- public static void show(Long id) {
- Article article = Article.findById(id);
- render(article);
- }
- public static void edit(Long id, String title) {
- Article article = Article.findById(id);
- article.title = title;
- article.save();
- show(id);
- }
注意在 edit 方法的***,是如何使我們重定向到 show 方法對應的頁面的。
在任何模板文件中,你可以利用同樣的語法生成鏈接:
- <a href="@{Article.show(article.id)}">${article.title}</a>
將會生成以下 HTML 內(nèi)容:
- <a href="/articles/15">My new article</a>
不要重復地將 Java 對象傳遞到模板文件
在大多數(shù)的 Java 框架中,為了把 Java 對象傳遞到模板文件,通常你需要類似這樣寫:
- Article article = Article.findById(id);
- User user = User.getConnected();
- Map<String, Object> model = new HashMap<String,Object>();
- model.put("article", article);
- model.put("user", user);
- render(model);
使用 Play,你只須這樣寫:
- Article article = Article.findById(id);
- User user = User.getConnected();
- render(article, user);
然后你就可以從模板中獲取相應的 Java 變量。這樣剩下了不少重復無用的代碼…
JPA 持久化
JPA 無疑是目前 Java 領域***的對象關系映射框架( ORM )。如果你熟悉 JPA,你會驚訝于它在 Play 框架中變得如此簡單。不需要任何配置,Play 會自動啟動 JPA 實體管理器,并在代碼發(fā)生修改時自動地同步。
而且如果你使用 Play 提供的 play.db.jpa.Model 作為超類時,它會幫助你把代碼寫得更漂亮。來看一下:
- public void messages(int page) {
- User connectedUser = User.find("byEmail", connected()).first();
- List<Message> messages = Message.find(
- "user = ? and read = false order by date desc",
- connectedUser
- ).from(page * 10).fetch(10);
- render(connectedUser, messages);
- }
簡單易用的文件上傳管理
在 Play 框架里文件上傳管理非常簡單。
以下 HTML 表單:
- #{form @uploadPhoto(), enctype:'multipart/form-data'}
- <input type="text" name="title" />
- <input type="file" id="photo" name="photo" />
- <input type="submit" value="Send it..." />
- #{/}
和這段 Java 代碼:
- public static void uploadPhoto(String title, File photo) {
- ...
- }
就完成了! 再簡單不過了吧?
原文鏈接:http://play-framework.herokuapp.com/zh/5things
【編輯推薦】