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. EPLAN 软件平台中的词“点“大全

    1. 中断点(Interruption Point):     在原理图绘制时,如果当前绘图区域的空间不足,需要转到其它页面继续绘制,而这两页之间存在连续的"信息流"时,可以使用& ...

  2. 译:C#面向对象的基本概念 (Basic C# OOP Concept) 第三部分(多态,抽象类,虚方法,密封类,静态类,接口)

    9.多态 Ploy的意思就是多于一种形式.在文章开始,方法那一章节就已经接触到了多态.多个方法名称相同,而参数不同,这就是多态的一种. 方法重载和方法覆盖就是用在了多态.多态有2中类型,一种是编译时多 ...

  3. iOS 7定制UIPageControl遇到的问题

    转自snorlax's blog 先说下ios7之前 那些点点的实现非常简单 就是UIPageControl.subviews 就是一个个点的UIImageView 所以只需简单的替换掉就好了代码如下 ...

  4. 基于Java的数据采集(终结篇)

    关于写过关于JAVA采集入库的三篇文章: 基于Java数据采集入库(一):http://www.cnblogs.com/lichenwei/p/3904715.html 基于Java数据采集入库(二) ...

  5. LiveWriter Test

    From LiveWriter.

  6. 【PRML读书笔记-Chapter1-Introduction】1.2 Probability Theory

    一个例子: 两个盒子: 一个红色:2个苹果,6个橘子; 一个蓝色:3个苹果,1个橘子; 如下图: 现在假设随机选取1个盒子,从中.取一个水果,观察它是属于哪一种水果之后,我们把它从原来的盒子中替换掉. ...

  7. Android Matirx的简介

    在Android中,对图片的处理需要使用到Matrix类,Matrix是一个3 x 3的矩阵,他对图片的处理分为四个基本类型: 1.Translate————平移X,Y轴变换,而不是移动图形 2.Sc ...

  8. `cocos2dx非完整` 添加xxtea加密模块

    在上一篇文章中,我已经开始着手写自己的模块,也就是fw部分.其中上一篇文章中完成的是lua部分的配置解析部分,涉及一点点平台方面的封装.这一片文章我来说明一下我是如何处理cocos2dx资源加密的.首 ...

  9. Linux - 获取Shell命令帮助信息

    Manual Page Chapter List 1:所有用户可以操作的指令或可执行文件 2:系统核心调用的函数与工具 3:子调用,常用的函数与函数库 4:设备,硬件文件说明,通常是/dev/的文件 ...

  10. 100款免费的圣诞节矢量图标素材(PSD & SVG)

    圣诞节的脚步越来越近了.今天,我们给大家收集了100个美丽的圣诞矢量图标素材.这套圣诞矢量图标集包含 PSD 和 SVG 两种格式,基于 Creative Commons 协议,可以在商业和个人项目中 ...