本章譯者:@Playframwork框架
經過 5 個實例,透視 Play 框架背後的哲學。fetch
用 Play 框架,在 Java 代碼中獲取 HTTP 請求參數是很是簡單的,只須要聲明方法的參數名和 HTTP 請求的參數名同樣就能夠了。code
例如,這個請求:orm
/articles/archive?date=08/01/08&page=2
把 date 和 page 聲明爲 Java 方法的傳入參數,就能夠獲取 HTTP 請求中 date 和 page 參數的值了:對象
public static void archive(Date date, Integer page) { List<Article> articles = Articles.fromArchive(date, page); render(articles); }
Play 框架會根據聲明的 Java 參數類型,自動把 HTTP 請求參數轉換成對應的 Java 對象。ip
這種自動綁定也適用於 任何的 Java 對象 。get
public class Person { public String name; public Integer age; }
一個簡單的用於添加用戶的控制器的 action 方法能夠像這樣:input
public static void add(Person p) { p.save(); }
對應的 HTML 表單域使用複合的參數名:同步
<form action="/Directory/add" method="POST"> Name: <input type="text" name="p.name" /> Age: <input type="text" name="p.age" /> </form>
Play 沒有等價於 Java Servlet forward 命令的方法,可是實現重定向確實很是簡單。只需調用相應的 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 內容:
<a href="/articles/15">My new article</a>
在大多數的 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 無疑是目前 Java 領域最佳的對象關係映射框架( ORM )。若是你熟悉 JPA,你會驚訝於它在 Play 框架中變得如此簡單。不須要任何配置,Play 會自動啓動 JPA 實體管理器,並在代碼發生修改時自動地同步。
並且若是你使用 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) { ... }
就完成了! 再簡單不過了吧?