Play with Play! - Play!最酷的5个功能

本文通过5个例子展示了play!框架背后的哲学。

1.绑定HTTP参数到Java方法

通过在Java方法中定义和HTTP参数同名的参数就可以方便的取得HTTP中的参数值。

例如:

/articles/archive?date=08/01/08&page=2

你可以通过定义方法参数来获取datepage的值:

public static void archive(Date date, Integer page) {
    List
<Article> articles = Articles.fromArchive(date, page);
    render(articles);
}

也可以直接绑定到类:

public class Person {
  String name;
  Integer age;
}

public static void add(Person p) {
  p.save();
}

HTML中如下定义:

<form action="/Directory/add" >
 Name: 
<input type="text" name="p.name" />
 Age: 
<input type="text" name="p.age" />
</form>

2.通过调用Java方法重定向到相应的action

只需要调用相应的Java方法就能方便地重定向到另一个actionPlay!会生成正确的redirect response,而不是forward

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 action的最后重定向到了show action

 

在模板中你可以使用类似的符号来生成链接:

<a href="@{Article.show(article.id)}">${article.title}</a>

最终生成的HTML

<a href="/articles/15">My new article</a>

 

3.直接把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); 

4.方便的文件上传

Play!框架中实现文件上传很方便:

HTML form

<form action="@{Article.uploadPhoto}" method="POST" enctype="multipart/form-data">
    
<input type="text" name="title" />
    
<input type="file" id="photo" name="photo" />
    
<input type="submit" value="Send it " />
</form>

Java代码:

public static void uploadPhoto(String title, File photo) {
   
}

5.不用任何配置就可以把应用分布到多个JVM

由于应用程序被设计成无状态的,所以你可以简单地在多台服务器上启动同一个应用,然后通过HTTP层面的负载均衡来实现分布式应用。不需要设置一个负债的服务器集群。

Tags: play, java

上一篇: Play with Play! - 框架概要
下一篇: Grails 1.1 Beta 2发布

相关文章

Trackbacks

点击获得Trackback地址,Encode: UTF-8

发表评论