《Play for Java》学习笔记(五)Form

本书第六章以一个实例介绍了Play Framework中Form的使用,如何绑定数据,如何进行验证,如何处理文件上传

一、项目结构

《Play for Java》学习笔记(五)Form

《Play for Java》学习笔记(五)Form

二、Play中表单的使用

1. 在Controller中使用Form

play.data包中包含了处理HTTP表单数据提交和验证(HTTP form data submission and validation)的一些helpers,一般步骤是定义一个play.data.Form并包裹其class,如:

Form<User> userForm =Form.form(User.class);
《Play for Java》学习笔记(五)Form
//Model—— User Object
public class User {
    public String email;
    public String password;
}
//controller—— userForm
Form<User> userForm = Form.form(User.class);  //1. 定义
//This form can generate a User result value from HashMap<String,String> data
Map<String,String> anyData = new HashMap();   //2. 写入数据到HashMap--mocking data
anyData.put("email", "bob@gmail.com");
anyData.put("password", "secret");
User user = userForm.bind(anyData).get();     //3. 写入数据到表单--绑定(保存数据)
//If have a request available in the scope, bind directly from the request content
User user = userForm.bindFromRequest().get();
《Play for Java》学习笔记(五)Form

用预设值显示表单——Displaying a form with preset values

《Play for Java》学习笔记(五)Form

《Play for Java》学习笔记(五)Form
public class Products extends Controller {
    private static final Form<Product> productForm = Form.form(Product.class);
    ...
    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));
    }
    ...
}
《Play for Java》学习笔记(五)Form

route是

GET         /products/:ean               controllers.Products.details(ean: String)

2. 在模板中使用表单(Form template helpers)

《Play for Java》学习笔记(五)Form

《Play for Java》学习笔记(五)Form


在模板中我们可以使用Form template的helpers来处理表单各个项

2.1 引入helper

  • @(productForm: Form[Product]) —— action传入的参数
  • @import helper._ —— Form helpers
  • @import helper.twitterBootstrap._ —— bootstrap helpers

2.2 生成<form> tag

@helper.form(action = routes.Products.save()) { ... }

可在生成的时候加入参数

@helper.form(action = routes.Products.save(),‘‘id -> "form") { ... }

2.3 生成 <input> element

《Play for Java》学习笔记(五)Form

还可以自定义HTML输入

《Play for Java》学习笔记(五)Form
@helper.input(myForm("email")) { (id, name, value, args) =>
    <inputtype="date"name="@name"id="@id" @toHtmlArgs(args)>
}
《Play for Java》学习笔记(五)Form

3. 处理表单的输入

《Play for Java》学习笔记(五)Form
① 创建boundForm对象,用于接受从HTTP传入的数据信息
boundForm将接受的表单数据传给Product的实例
③ produce.save()保存表单数据到Product的实例

 三、数据绑定

PLay中有三种绑定方式

  1. 表单绑定(Form binding),见前所述
  2. URL查询参数绑定(URL query parameters binding)
  3. URL路径绑定(URL path binding)

《Play for Java》学习笔记(五)Form,布布扣,bubuko.com

《Play for Java》学习笔记(五)Form

上一篇:小程序近期总结


下一篇:解决微信端苹果手机无法跳转页面的问题