Play 能夠作的 5 件很酷的事

Play 能夠作的 5 件很酷的事

本章譯者:@Playframwork框架

經過 5 個實例,透視 Play 框架背後的哲學。fetch

綁定 HTTP 參數到 JAVA 方法參數

用 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>

經過調用對應的 Java 方法進行重定向

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 框架中,爲了把 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 實體管理器,並在代碼發生修改時自動地同步。

並且若是你使用 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) {
   ...
}

就完成了! 再簡單不過了吧?

相關文章
相關標籤/搜索