1. 程式人生 > >你可以使用 play framework 做5件很爽的事情

你可以使用 play framework 做5件很爽的事情

1.繫結HTTP引數到JAVA方法裡的引數。

使用PLAY可以很簡單的從JAVA程式碼中檢索HTTP引數。只要把方法引數申明成和HTTP引數相同既可。

比如,這個request:

Http程式碼 複製程式碼
  1. /articles/archive?date=08/01/08&page=2


只要把date,page宣告成JAVA方法的引數,你就可以檢索它們:

Java程式碼 複製程式碼
  1. publicstaticvoid archive(Date date, Integer page) {   
  2.     List<Article> articles = Articles.fromArchive(date, page);   
  3.     render(articles);   
  4. }  



PLAY將使用該方法的引數的靜態型別,來把HTTP值翻譯成JAVA物件。

智慧繫結對任何的類都有效。

Java程式碼 複製程式碼
  1. publicclass Person {   
  2. public String name;   
  3. public Integer age;   
  4. }  


一個簡單的控制器,比如向Person新增一個例項可能會像這樣:

Java程式碼 複製程式碼
  1. publicstaticvoid add(Person p) {   
  2.     p.save();   
  3. }  


HTML表單名稱定義的欄位:

Html程式碼 複製程式碼
  1. <form
    action="/Directory/add"method="POST">
  2.     Name: <inputtype="text"name="p.name"/>
  3.     Age: <inputtype="text"name="p.age"/>
  4. </form>


2.重定向到一個action呼叫相應的Java方法。

Play框架的forward並不等同Servlet中的forward,它有自己的forward,並且重定向到另一個ACTION非常的簡單。只需要呼叫相應

的JAVA方法,PLAY框架就會生成正確的HTTP “Redirect” response。

Java程式碼 
複製程式碼
  1. publicstaticvoid show(Long id) {   
  2.     Article article = Article.findById(id);   
  3.     render(article);   
  4. }   
  5. publicstaticvoid edit(Long id, String title) {   
  6.     Article article = Article.findById(id);   
  7.     article.title = title;   
  8.     article.save();   
  9.     show(id);   
  10. }  

注意:在 edit action 結束時,我們如何重定向到 show action。

在任何模板中,你可以使用類似這樣的方法來生成連線。

Html程式碼 複製程式碼
  1. <ahref="@{Article.show(article.id)}">${article.title}</a>
  2. That will generate the following HTML:   
  3. <ahref="/articles/15">My new article</a>


3.當傳遞JAVA物件到模板時,你不需要重複去做類似以下的事情。

在許多框架中,為了傳遞JAVA物件到模板中,你需要寫如下的程式碼:

Java程式碼 複製程式碼
  1. Article article = Article.findById(id);   
  2. User user = User.getConnected();   
  3. Map<String, Object> model = new HashMap<String,Object>();   
  4. model.put("article", article);   
  5. model.put("user", user);   
  6. render(model);  


但在PLAY框架中,你只需要這樣寫就搞定了:

Java程式碼 複製程式碼
  1. Article article = Article.findById(id);   
  2. User user = User.getConnected();   
  3. render(article, user);  


在模板中JAVA本地名字中檢索物件,這樣可以少寫不少程式碼。


4. 更高效的JPA

在PLAY框架中使用JPA是非常簡單的,無需要任何配置,當代碼載入時,PLAY框架會使用HIBERNATE自動開啟JPA Entity Manager並且神奇的使它同步。

此外,如果你使用play.db.jpa.Model超類,將有助於使你的程式碼更漂亮。如下:

Java程式碼 複製程式碼
  1. publicvoid messages(int page) {   
  2.     User connectedUser = User.find("byEmail", connected());   
  3.     List<Message> messages = Message.find(   
  4. "user = ? and read = false order by date desc",   
  5.         connectedUser   
  6.     ).from(page * 10).fetch(10);   
  7.     render(connectedUser, messages);   
  8. }  



5. 簡單的檔案上傳管理

檔案上傳管理在PLAY框架中非常簡單。

下面這個HTML form:

Html程式碼 複製程式碼
  1. <formaction="@{Article.uploadPhoto()}"method="POST"enctype="multipart/form-data">
  2. <inputtype="text"name="title"/>
  3. <inputtype="file"id="photo"name="photo"/>
  4. <inputtype="submit"value="Send it..."/>
  5. </form>

對應的JAVA方法:

Java程式碼 複製程式碼
  1. publicstaticvoid uploadPhoto(String title, File photo) {   
  2.    ...   
  3. }