作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

表单(form)是最常见的从客户往服务器传递数据的方式。Play框架提供了一些工具。它们可以从表单中提取数据,验证提交数据的合法性,或者在视图中显示表单。我先来介绍最简单的使用表单提交数据的方式。

增加表单

我可以用纯粹html的方式产生一个表单。在app/views下增加模板form.scala.html:

<!DOCTYPE html>
<html>
<body>
<form method="POST" action="/postForm">
<input type="text" name="content"></input>
<input type="submit"></input>
</form>
</body>
</html>

在Application控制器中,增加一个动作form(),显示模板:

public static Result form() {
return ok(views.html.form.render());
}

在routes中增加导航

GET     /form                       controllers.Application.form()

页面如下:

数据提取

在文本框中输入任意字符,点击submit后,表单将以POST方法提交到/postForm这一URL。增添负责处理该URL的动作,Application.postForm()

public static Result postForm() {
DynamicForm in = Form.form().bindFromRequest();
String result = in.get("content");
return ok(result);
}

DynamicForm和Form都来自play.data。Form.form().bindFormRequest()从请求中提取表单信息,并放入到DynamicForm类型的in对象中。

我上面用get()方法,来提取表单中不同名字的输入栏。比如上面的"content"。postForm()动作把表单中填写的内容直接显示。

增加routes记录

POST    /postForm                   controllers.Application.postForm()

在/form的页面下输入任意字符串并提交,查看效果。

我介绍了表单最基本的使用方式。下面了解Play框架提供的其它的表单工具。

表单对象

在动作内部,可以创建一个对象来指代表单。表单的每个输入栏为表单对象的一个属性。我可以通过增加标注(annotation)的方法,验证表单的输入(Form Validation)。

首先修改app/views/form.scala.html

<!DOCTYPE html>
<html>
<body>
<form method="POST" action="/postForm">
<label>Email</label>
<input type="email" name="email">
<label>Password</label>
<input type="password" name="password">
<label>Comment</label>
<input type="text" name="comment">
<input type="submit">
</form>
</body>
</html>

这个表单有三个输入栏,名字分别为email, password和comment。

创建app/util/文件夹,在其中创建User.java。User类用于在Play内部指代上面的表单:

package util;

import play.data.validation.Constraints.Email;
import play.data.validation.Constraints.Required; public class User {
@Email
public String email;
@Required
public String password;
public String comment;
}

User类指代一个表单的数据。我还为两个属性增加了标注。Play服务器可以据此验证输入的合法性。比如@Email的限定就要求输入为"*@*"的形式。@Required则要求输入栏不为空。如果违反这些限定,那么Play将抛出异常。

修改动作postForm()。User类的对象user用来保存表单数据。

public static Result postForm() {
Form<User> userForm = Form.form(User.class);
User user = userForm.bindFromRequest().get();
return ok(user.email + " " + user.password);
}

最后的ok()中调用了表单对象中保存的数据。

分别输入合法和不合法的数据,观察Play返回的页面。

表单模板

我上面手动创建模板中的表单,并保持视图中的表单和表单对象一致。我还可以在模板中直接调用表单对象。这样做,能让视图中的表单和表单对象自动的保持一致。

修改form.scala.html为

@(userForm: Form[util.User])

<!DOCTYPE html>
<html>
<body>
@helper.form(action = routes.Application.postForm()) {
@helper.inputText(userForm("email"))
@helper.inputPassword(userForm("password"))
@helper.inputText(userForm("comment"))
<input type="submit">
}
</body>
</html>

这里使用了Play所提供的helper工具。helper可以在表单中增加表单form,再加入不同类型的输入栏,比如inputText和inputPassword。

修改原有的动作form()

public static Result form() {
Form<User> userForm = Form.form(User.class);
return ok(views.html.form.render(userForm));
}

这里,表单对象作为参数传递给模板。最后的html页面中的表单,将由Play自动生成。

总结

表单

数据提交

欢迎继续阅读“Java快速教程”系列文章

来玩Play框架04 表单的更多相关文章

  1. Flask10 登录模块、表单框架、表单渲染、表单验证、bookie、请求之前钩子、g对象、编写装饰器

    from flask import Flask from flask import request from flask import render_template from flask_wtf i ...

  2. HTML基础篇之内嵌框架和表单

    内嵌框架: <iframe src="http://www.baidu.com" name="d"></iframe> 网页会显示一个这 ...

  3. 前端框架bootstrap 表单和导航菜单的 Demo(第二篇)

    表单: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <tit ...

  4. HTML静态网页 图片热点、框架、表单

    图片热点: 规划出图片上的一个区域,可以做出超链接,直接点击图片区域就可以完成跳转的效果. 示例: 网页划区: 在一个网页里,规划出一个区域用来展示另一个网页的内容. 示例: 框架: 1.frames ...

  5. dwz框架---(2)表单回调函数

    dwz中的表单回调函数大概有下面几种: /** * 普通ajax表单提交 * @param {Object} form * @param {Object} callback * @param {Str ...

  6. Python——Flask框架——Web表单

    一.框架Flask-WTF 安装: pip install flask-wtf 需要程序设置一个密钥 app = Flask(__name__) app.config['SECRET_KEY'] = ...

  7. HTML框架与表单

    1.框架处理结构 <html> <head> <meta http-equiv="Content-Type" content="text/h ...

  8. TP框架---thinkphp表单验证

    自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证.验证的代码要写在模型层即Model里面. 数据验证有两种方式: 静态方式:在模型类里面 ...

  9. Django框架form表单配合ajax注册

    总结一下,其实form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 保留上次输入内容 下面是写的登录页面的实例 1:views视图中的代码 # 注册页面 def regi ...

随机推荐

  1. JDK安装与配置

    JDK安装与配置 一.下载 JDK是ORACLE提供免费下载使用的,官网地址:https://www.oracle.com/index.html 一般选择Java SE版本即可,企业版的选择Java ...

  2. UGUI Text(Label)

    环境 Unity 5.3.6f1 关于Best Fit 如果勾选了 Best Fit ,当有大量的文本填充在Text上时,那么文字是不会自动换行的. 打字机效果 在github上已有现成的:https ...

  3. Spring cookie 实战

    测试环境搭建 使用Springboot构建web server, 在测试方法中打印接收的cookie. @RestController @RequestMapping("/register/ ...

  4. 用IntelliJ IDEA创建Gradle项目简单入门

    Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...

  5. Fedora 22中的RPM软件包管理工具

    Introduction The RPM Package Manager (RPM) is an open packaging system that runs on Fedora as well a ...

  6. ASP.NET Web API WebHost宿主环境中管道、路由

    ASP.NET Web API WebHost宿主环境中管道.路由 前言 上篇中说到ASP.NET Web API框架在SelfHost环境中管道.路由的一个形态,本篇就来说明一下在WebHost环境 ...

  7. xib文件的加载方法

    xib文件的加载方法 以UITableViewCell的cell为例 很多时候因为系统的cell无法满足我们的日常需求,我们都会自定义cell 因为cell的界面比较固定,所以通常都会选择用xib来描 ...

  8. 从 Everything 到 Listary,自 Launch 归 Wox

    人生即在于体验,而体验源于去尝试,去折腾,去改变,去塑新.要知道:"过一个平凡无趣的人生实在太容易了,你可以不读书,不冒险,不运动,不写作,不外出,不折腾--但是,人生最后悔的事情就是:我本 ...

  9. zookeeper集群搭建

    1.由于是第一次搭建zk的集群,过程中遇到些问题,给自己也给遇到问题的人提供一种可能解决问题的方法. 第一步:下载zk的最新版,我下的是3.4.9,在zk的官网,下载后解压到/usr/local ta ...

  10. 解析大型.NET ERP系统 单据标准(新增,修改,删除,复制,打印)功能程序设计

    ERP系统的单据具备标准的功能,这里的单据可翻译为Bill,Document,Entry,具备相似的工具条操作界面.通过设计可复用的基类,子类只需要继承基类窗体即可完成单据功能的程序设计.先看标准的销 ...