Play 可以做的 5 件很酷的事

本章译者:@Playframwork

通过 5 个实例,透视 Play 框架背后的哲学。

绑定 HTTP 参数到 JAVA 方法参数

用 Play 框架,在 Java 代码中获取 HTTP 请求参数是非常简单的,只需要声明方法的参数名和 HTTP 请求的参数名一样就可以了。

例如,这个请求:

/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 对象。

这种自动绑定也适用于 任何的 Java 对象 。

public class Person {
public String name;
public Integer age;
}

一个简单的用于添加用户的控制器的 action 方法可以像这样:

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) {
...
}

就完成了! 再简单不过了吧?

Play 可以做的 5 件很酷的事的更多相关文章

  1. 安装Ubuntu 14.04后要做的5件事情

    转自安装Ubuntu 14.04后要做的5件事情 Ubuntu目前是世界上最流行的Linux操作系统,它提供了桌面版本和服务器版本,其他流行的Linux发行版本如Linux Mint也是基于Ubunt ...

  2. 安装完Ubuntu 14.04要做的九件事

    www.linuxidc.com/Linux/2014-04/100411.htm 1.看看有哪些新特性 安装完之后的第一件事肯定是看看Ubuntu 14.04有哪些新的特性. Ubuntu 14.0 ...

  3. 安装 Kali Linux 后需要做的 20 件事

    安装 Kali Linux 后需要做的 20 件事 本文含有我觉得有用的每一件事情.本文分为三大部分: 专门针对Kali用户 Kali Linux是来自Debian的一个特殊版本,Kali Linux ...

  4. 安装 CentOS 7 后必做的七件事

    原文 安装 CentOS 7 后必做的七件事 CentOS 是最多人用来运行服务器的 Linux 版本,最新版本是 CentOS 7.当你兴趣勃勃地在一台主机或 VPS 上安装 CentOS 7 后, ...

  5. 亲身体验:digitalocean vps能做的10件事

    我写过一篇亲身体验:digitalocean和linode评测哪个好,帮助不少网友选购价格便宜性能优异的免备案vps,相信大家对两家产品有所了解.vps的性能和用途远远超过传统的虚拟主机,你拥有独立I ...

  6. 刚安装Fedora 23工作站后,你必须要做的24件事

    [51CTO.com快译]Fedora 23工作站版本已发布,此后我们就一直在密切关注它.我们已经为新来读者介绍了一篇安装指南:<Fedora 23工作站版本安装指南> 还有一篇介绍如何从 ...

  7. 新手学习SEO要做的七件事是什么?

    学习SEO可能不那么先进的编程,学习SEO不可能掌握网页设计,学习SEO不需要学习SEO DIV + CSS;不是一个困难的任务,但是在学习过程中,如果你想掌握SEO,那么我们要做的几件事. 1.学习 ...

  8. IntelliJ IDEA安装后需要必须做的一件事

    把Alt+斜杆 删除 Ctrl+空格修改成 Alt+斜杆 Ctrl+空格用过输入法的人都应该知道为什么要做上面一件事

  9. 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)转载自码农网

    CentOS 是一个工业标准的 Linux 发行版,是红帽企业版 Linux 的衍生版本.你安装完后马上就可以使用,但是为了更好地使用你的系统,你需要进行一些升级.安装新的软件包.配置特定服务和应用程 ...

随机推荐

  1. 使用jQuery开发iOS风格的页面导航菜单

    在线演示1 本地下载     申请达人,去除赞助商链接 iOS风格的操作系统和导航方式现在越来越流行,在今天的jQuery教程中,我们将介绍如何生成一个iphone风格的菜单导航. HTML代码 我们 ...

  2. Appium环境抢建

    原文:Appium环境抢建(for web browser test)Android SDKAppium安装 nodejs安装 Appium配置手机下载&运行测试项目Appium是Androi ...

  3. thinkphp 3.2.3+Admin LTE后台框架

  4. web通过ActiveX打印

    最近做了一个activex控件,可以通过html页面动态设置报表文件的数据,控件里的报表是通过FastReport实现了,可以通过FastReport先把报表设置好.欢迎大家提意见 控件及Demo下载

  5. Java 监控请求

    监控对象 import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Map.Ent ...

  6. (译)ECMAScript 5 Objects and Properties (二)

    继 (译)ECMAScript 5 Objects and Properties 全文地址 http://ejohn.org/blog/ecmascript-5-objects-and-propert ...

  7. 用live writer写博客

    一.软件准备: 最新版的是Windows Live Writer 2012,但是不提供单独的安装包,它是和微软其它软件一起的(包括MSN.Window Move Maker等),软件大小为131M,官 ...

  8. 【转载】Linux下编辑生成.mo文件

    转载自:http://www.hackbase.com/tech/2012-02-27/65972.html 编辑生成.mo文件 我们在弄网站的时候很可能会接触到.mo和.po文件..po文件是GNU ...

  9. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  10. nodeJS 菜鸟入门

    从一个简单的 HTTP 服务开始旅程-- 创建一个 server.js 文件,写入: //最简单的 http 服务例子 var http = require("http"); ht ...