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