注解:  CRUD——Create,Retrieve, Update, Delete

文件结构

aaarticlea/png;base64,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" alt="" />

一、添加控制器(controller和action)——/app/controllers/Products.java

package controllers;
import play.mvc.Controller;
import play.mvc.Result;
public class Products extends Controller {
public static Result list() { //列出所有的产品
return TODO;
}
public static Result newProduct() { //显示一个空的产品Form
return TODO;
}
public static Result details(String ean) { //显示一个编辑产品的Form
return TODO;
}
public static Result save() { //保存产品资料
return TODO;
}
}

说明:  controllers的action方法必须满足以下三个条件:

  • 必须是public
  • 必须是static
  • 返回类型必须是Result和Result的子类

完整代码为

package controllers;

import models.Product;
import play.data.Form;
import play.mvc.Controller;
import play.mvc.Result;
import java.util.ArrayList;
import java.util.List; import views.html.*; public class Products extends Controller {
//constant for Form
private static final Form<Product> productForm = Form.form(Product.class); public static Result list(){
List<Product> products = Product.findAll();
return ok(list.render(products));
} public static Result newProduct(){
return ok(details.render(productForm));
} public static Result details(String ean){
final Product product = Product.findByEan(ean);
if(product == null){
return notFound(String.format("Product %s does not exist.", ean));
} Form<Product> filledForm = productForm.fill(product);
return ok(details.render(filledForm));
} public static Result save(){
Form<Product> boundForm = productForm.bindFromRequest();
if(boundForm.hasErrors()){
flash("error","Please correct the form below.");
return badRequest(details.render(boundForm));
} Product product = boundForm.get();
product.save();
flash("success",String.format("Successfully added product %s", product));
return redirect(routes.Products.list());
} public static Result delete(String ean){
final Product product = Product.findByEan(ean);
if(product == null){
return notFound(String.format("Product %s does not exist.", ean));
} Product.remove(product);
return redirect(routes.Products.list());
}
}

Java Code

二. 修改routes文件

GET       /products/       controllers.Products.list()
GET /products/new controllers.Products.newProduct()
GET /products/:ean controllers.Products.details(ean: String)
POST /products/ controllers.Products.save()
DELETE  /products/:ean   controllers.Products.delete(ean: String)

action和route对应关系如下图

aaarticlea/png;base64,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" alt="" width="448" height="183" />

三 . 添加Model Class——/app/models/Product.java

3.1) 数据模型

public class Product {
public String ean;
public String name;
public String description; public Product(){} public Product(String ean, String name, String description){
this.ean = ean;
this.name = name;
this.description = description;
} public String toString(){
return String.format("%s - %s", ean, name, description);
}
}

说明:    不同于Java,play使用public,不用setter和getter方法

3.2)为了模拟练习,在Product.java中加一些模拟数据

// mocking some data
private static List<Product> products;
static {
products = new ArrayList<Product>();
products.add(new Product("111111111","Paperclips 1","Paperclips description 1"));
products.add(new Product("222222222","Paperclips 2","Paperclips description 2"));
products.add(new Product("333333333","Paperclips 3","Paperclips description 3"));
products.add(new Product("444444444","Paperclips 1","Paperclips description 4"));
products.add(new Product("555555555","Paperclips 1","Paperclips description 5"));
}

3.3) 数据处理方法——findAll(), findByEan(), findByName(), remove(), save()

    public static List<Product> findAll(){
return new ArrayList<Product>(products);
} public static Product findByEan(String ean){
for(Product candidate : products){
if(candidate.ean.equals(ean)){
return candidate;
}
}
return null;
} public static List<Product> findByName(String term){
final List<Product> results = new ArrayList<Product>();
for(Product candidate : products){
if(candidate.name.toLowerCase().contains(term.toLowerCase())){
results.add(candidate);
}
}
return results;
} public static boolean remove(Product product){
return products.remove(product);
} public void save(){
products.remove(findByEan(this.ean));
products.add(this);
}

完整代码为

Java Code

四、添加和修改模板文件——list.scala.html, details.scala.html

4.1) list.scala.html

@(products:List[Product])    <!--parameter list: define which parameters this template accepts -->

@main("Product catalogue"){   <!-- call main template, the title is "Product catalogue" -->
<h2>All Product</h2>
<table class="table table-striped">
<thead>
<tr>
<th>EAN</th>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
@for(product <- products){
<tr>
<td><a href="@routes.Products.details(product.ean)">@product.ean</a></td>
<td><a href="@routes.Products.details(product.ean)">@product.name</a></td>
<td><a href="@routes.Products.details(product.ean)">@product.description</a></td>
</tr>
}
</tbody>
</table>
}

相应的,修改controller用于显示该模板的HTML内容,即修改/app/controllers/Products.java中的list()方法

...
import views.html.*; //引入模板 public class Products extends Controller {
public static Result list() {
List<Product> products = Product.findAll();
return ok(list.render(products));
}
...
}

在浏览器地址栏输入: http://localhost:9000/products

aaarticlea/png;base64,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" alt="" width="424" height="205" />

4.2) details.scala.html

@(productForm:Form[Product])
@import helper._
@import helper.twitterBootstrap._ @main("Product Form"){
<h1>Product Form</h1>
@helper.form(action = routes.Products.save()){
<fieldset>
<legend>Product(@productForm("name").valueOr("New"))</legend>
@helper.inputText(productForm("ean"),'_label -> "EAN")
@helper.inputText(productForm("name"),'_label -> "Name")
@helper.textarea(productForm("description"),'_label -> "description")
</fieldset>
<input type="submit" class="btn btn-primary" value="Save" />
<a class="btn" href="@routes.Application.index()">Cancel</a>
}
}

说明:  本模板使用了Play表单Form

  • @(productForm:Form[Product]) —>— productForm是play.data.Form.form()的方法,在controller中定义
  • @import helper._ —>— 引入生产HTML,@import helper.twitterBootstrap._ 生产的HTML符合Twitter Bootstrap标准
  • @helper.form(action =routes.Products.save()){ —>— 生产的 HTML的Form代码, 并将数据提交给controller的save()方法处理,@helper.inputText生产的 HTML的input代码,@helper.textarea生产的 HTML的textarea代码
  • Product(@productForm("name").valueOr("New"))  —>— productForm.field("name")的缩写,请求表单中名为name的域(field)值,如何该值不存在,则创建一个"New"为默认值。

最后生产的HTML代码如下

<form action="/products" method="GET" >
<fieldset>
<legend>Product(New)</legend>
<div class="clearfix " id="ean_field">
<label for="ean">EAN</label>
<div class="input">
<input type="text" id="ean" name="ean" value="" >
<span class="help-inline"></span>
<span class="help-block">Required</span>
</div>
</div> <div class="clearfix " id="name_field">
<label for="name">Name</label>
<div class="input">
<input type="text" id="name" name="name" value="" >
<span class="help-inline"></span>
<span class="help-block">Required</span>
</div>
</div>
<div class="clearfix " id="description_field">
<label for="description">description</label>
<div class="input">
<textarea id="description" name="description" ></textarea>
<span class="help-inline"></span>
<span class="help-block"></span>
</div>
</div>
</fieldset>
<input type="submit" class="btn btn-primary" value="Save" />
<a class="btn" href="/products">Cancel</a>
</form>

HTML Code

相应的,修改controller用于显示该模板的HTML内容,即修改/app/controllers/Products.java中的newProduct()()方法

    public static Result newProduct(){
return ok(details.render(productForm));
}

在浏览器地址栏输入: http://localhost:9000/products/new

aaarticlea/png;base64,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" alt="" width="227" height="288" />

五、处理表单提交和验证——binding values from the request

play可以从HTTP request获取一个包含name/value对的映射Map,实现这个功能的是类Form的bindFromRequest()方法,该方法会返回一个Form对象,故我们可以在保存的时候获取页面表单的数据。

5.1) 在/app/models/Products.java中加入

public class Products extends Controller {
...
public static Result save() {
Form<Product> boundForm = productForm.bindFromRequest();
Product product = boundForm.get();
product.save();
return ok(String.format("Saved product %s", product));
}
}

5.2) 在/app/models/Product.java中加入验证

...
import play.data.validation.Constraints;
public class Product {
...
@Constraints.Required
public String ean;
@Constraints.Required
public String name;
public String description;
...
}

5.3) 对/app/models/Products.java中save()的改进

对模型加入验证数据后,希望能在controller中显示相应的成功、失败信息,这里可以使用play的validation表单功能,修改save()方法如下:

public static Result save() {
Form<Product> boundForm = productForm.bindFromRequest();
if(boundForm.hasErrors()) {
flash("error", "Please correct the form below.");
return badRequest(details.render(boundForm));
}
Product product = boundForm.get();
product.save();
flash("success",String.format("Successfully added product %s", product));
return redirect(routes.Products.list());
}

同时还必须在app/views/main.scala.html的<body>标签的开头中加入实现flash scope的代码:

@if(flash.containsKey("success")){
<div class="alert alert-success">
@flash.get("success")
</div>
}
@if(flash.containsKey("error")){
<div class="alert alert-error">
@flash.get("error")
</div>
}

说明:  flash scope是用于在请求(request)的时候存储变量的一个地方,在下一次请求开始之前存储在flash scope的值一直保持着,所以flash 是flash scope用来显示失败和成功是最理想的!

aaarticlea/png;base64,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" alt="" width="229" height="295" />

六、在列表中加入删除功能——app/views/products/list.scala.html

6.1) 在routes中加入DELETE路由

DELETE     /products/:ean      controllers.Products.delete(ean: String)

6.2) 在list.scala.html中加入JS代码,本例用JS处理Ajax请求

<h2>All products</h2>
<script>
function del(urlToDelete) {
$.ajax({
url: urlToDelete,
type: 'DELETE',
success: function(results) {
location.reload(); // Refresh the page
}
});
}
</script>
......
<tbody>
@for(product <- products){
<tr>
<td><a href="@routes.Products.details(product.ean)">@product.ean</a></td>
<td><a href="@routes.Products.details(product.ean)">@product.name</a></td>
<td><a href="@routes.Products.details(product.ean)">@product.description</a></td>
<td>
<a href="@routes.Products.details(product.ean)"><i class="fa fa-pencil"></i></a>&nbsp;&nbsp;
<a onclick="del('@routes.Products.delete(product.ean)')"><i class="fa fa-trash-o"></i></a>
</td>
</tr>
}
</tbody>
</table>
<a href="@routes.Products.newProduct()" class="btn btn-primary"><i class="fa fa-plus-circle"></i> New product</a>

aaarticlea/png;base64,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" alt="" width="659" height="228" />

说明: 整个案例代码

《Play for Java》学习笔记(二)基本的CRUD应用的更多相关文章

  1. Java学习笔记二十九:一个Java面向对象的小练习

    一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...

  2. 数组排序、递归——(Java学习笔记二)

    升序:      选择排序:         选定一个元素,一次和后面的元素相比较,如果选定的元素大雨后面的比较元素,就交换位置         先出现最小值,最后出现最大值. public stat ...

  3. Java学习笔记二:数据类型II

    GitHub代码练习地址:https://github.com/Neo-ML/JavaPractice/blob/master/Intpractice3.java 一  Java中的数据类型 Java ...

  4. Java学习笔记二十八:Java中的接口

    Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...

  5. Java学习笔记二十七:Java中的抽象类

    Java中的抽象类 一:Java抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就 ...

  6. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  7. Java学习笔记二十四:Java中的Object类

    Java中的Object类 一:什么是Object类: Object类是所有类的父类,相当于所有类的老祖宗,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object ...

  8. Java学习笔记二十二:Java的方法重写

    Java的方法重写 一:什么是方法的重写: 如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法. 语法规则 返回值类型.方法名.参数类型及个数都要与父类继承的 ...

  9. Java学习笔记二十一:Java面向对象的三大特性之继承

    Java面向对象的三大特性之继承 一:继承的概念: 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方 ...

  10. Java学习笔记二十:Java中的内部类

    Java中的内部类 一:什么是内部类: (1).什么是内部类呢? 内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. (2).那为什么要将一个类定 ...

随机推荐

  1. python_way day11 自定义线程池

    python_way day11 线程池 为什么需要线程池 线程多一些固然好,但是过多的线程反倒影响系统的负荷,所以我们就需要创建合适多的线程,哪我们把线程放到哪里?这时就放到线程池中. 线程池中存放 ...

  2. GitHub上不错的Android开源项目(三)

    收集相关系列资料,自己用作参考,练习和实践.小伙伴们,总有一天,你也能写出 Niubility 的 Android App :-) GitHub上不错的Android开源项目(一):http://ww ...

  3. mac系统如何进行剪切

    来源: http://jingyan.baidu.com/article/1612d5007f76e7e20e1eeeca.html 分步阅读 mac os x下没有像windows中现成的“剪切”命 ...

  4. openstack 排错

    1.查看日志 grep ERROR /var/log/keystone/keystone.log 2. # nova list ERROR:n/a (http 404) 检查环境变量是否正确.

  5. iOS - UIDevice

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIDevice : NSObject @available(iOS 2.0, *) public class UI ...

  6. 机器学习十大算法之KNN(K最近邻,k-NearestNeighbor)算法

    机器学习十大算法之KNN算法 前段时间一直在搞tkinter,机器学习荒废了一阵子.如今想重新写一个,发现遇到不少问题,不过最终还是解决了.希望与大家共同进步. 闲话少说,进入正题. KNN算法也称最 ...

  7. mysql概要(十五)存储过程

    1.定义: 2.查看所有存储过程: show procedure status; 3.创建存储过程: create procedure 存储过程名字(参数) begin s1l语句; end$     ...

  8. JS获取URL中参数值(QueryString)的4种方法分享<转>

    方法一:正则法 复制代码代码如下: function getQueryString(name) {    var reg = new RegExp('(^|&)' + name + '=([^ ...

  9. C#中“==”和equals()的区别

    如以下代码: 1 2 3 4 5 6 7 8 9 int age = 25;   short newAge = 25;   Console.WriteLine(age == newAge);  //t ...

  10. maven pom.xml解释 (转)

    maven3实战之maven使用入门(编写POM) ---------- maven项目的核心是pom.xml.POM(Project Object Model,项目对象模型)定义了项目的基本信息,用 ...