数据绑定和表单标签库-4.15-王溢淇

原创 2018年04月15日 23:06:09

数据绑定概览

基于 HTTP 的特性,所有 HTTP 请求参数的类型均为字符串。在前面的章节中,为了获取正确的产品价格,不得不将字符串解析成BigDecimal类型。为了便于复习,这里把第 4 章中ProductController类的 saveProduct方法的部分代码复制过来了。

@RequestMapping(value="save-product")

public StringsaveProduct(ProductForm productForm, Model model) {

logger.info("saveProductcalled");

// no need tocreate and instantiate a ProductForm

// createProduct

Product product = new Product();product.setName(productForm.getName());product.setDescription(productForm.getDescription()); try {

product.setPrice(newBigDecimal(productForm.getPrice()));

} catch (NumberFormatException e) {

}

之所以需要解析  ProductForm  中的 price  属性,是因为它是一个  String,却需要用

BigDecimal 来填充  Product的  price 属性。有了数据绑定,就可以用下面的代码取代上面的

saveProduct方法部分。


 

@RequestMapping(value="save-product")

public StringsaveProduct(Product product, Model model)

有了数据绑定,就不再需要 ProductForm类,也不需要解析Product 对象的 price 属性了。数据绑定的另一个好处是:当输入验证失败时,它会重新生成一个HTML 表单。手工编

写 HTML 代码时,必须记着用户之前输入的值,重新填充输入字段。有了 Spring 的数据绑定

和表单标签库后,它们就会替你完成这些工作。

表单标签库

表单标签库中包含了可以用在JSP 页面中渲染 HTML 元素的标签。为了使用这些标签,必须在 JSP 页面的开头处声明这个taglib 指令。

<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

表 5.1展示了表单标签库中的标签。

在接下来的小节中,将逐一介绍这些标签。5.3 节展示了一个范例应用程序,展示了数据绑定结合表单标签库的使用方法。

表 5.1   表单标签库中的标签

 

标签

描述

form

渲染表单元素

input

渲染<input type="text"/>元素

password

渲染<input type="password"/>元素

hidden

渲染<input type="hidden"/>元素

textarea

渲染 textarea 元素

checkbox

渲染一个<input type="checkbox"/>元素

checkboxes

渲染多个<input type="checkbox"/>元素

radiobutton

渲染一个<input type="radio"/>元素

radiobuttons

渲染多个<input type="radio"/>元素

select

渲染一个选择元素

option

渲染一个可选元素

options

渲染一个可选元素列表

errors

在 span 元素中渲染字段错误


表单标签

表单标签用于渲染HTML 表单。要使用渲染一个表单输入字段的任何其他标签,必须有一个 form 标签。表单标签的属性见表5.2。

表5.2 中的所有标签都是可选的。这个表中没有包含HTML 属性,如method 和action。

commandName 属性或许是其中最重要的属性,因为它定义了模型属性的名称,其中包含了一个表单支持对象(form backing object),其属性将用于填充所生成的表单。如果该属性存在,则必须在返回包含该表单的视图的请求处理方法中添加相应的模型属性。例如,在本章配套的 tags-demo 应用程序中,下列表单标签是在 BookAddForm.jsp 中定义的。

<form:formcommandName="book" action="save-book"method="post">

...

</form:form>

 

 

属性

描述

acceptCharset

定义服务器接受的字符编码列表

commandName

暴露表单对象之模型属性的名称,默认为 command

cssClass

定义要应用到被渲染 form 元素的 CSS 类

cssStyle

定义要应用到被渲染 form 元素的 CSS 样式

htmlEscape

接受 true 或者 false,表示被渲染的值是否应该进行 HTML 转义

modelAttribute

暴露表单支持对象的模型属性名称,默认为 command

BookController 类中的 inputBook 方法,是返回 BookAddForm.jsp 的请求处理方法。下面就是inputBook 方法。

@RequestMapping(value = "/input-book") public StringinputBook(Model model) {

...

model.addAttribute("book", newBook());

return"BookAddForm";

}

此处用 book 属性创建了一个Book 对象,并添加到Model。如果没有Model 属性,

BookAddForm.jsp页面就会抛出异常,因为表单标签无法找到在其 commandName 属性中指定的 form backing object。


 

此外,一般来说,仍然需要使用action 和method 属性。这两个属性都是HTML 属性

数据绑定范例

在表单标签库中利用标签进行数据绑定的例子,参见 tags-demo 应用程序。这个范例围绕

domain 类 Book 进行。这个类中有几个属性,包括一个类型为 Category的 category 属性。

Category有 id 和name 两个属性。

这个应用程序允许列出书目、添加新书,以及编辑书目。


Book 类和 Category 类是这个应用程序中的 domain 类,它们分别如清单 5.1 和清单5.2 所示。

 

清单 5.1   Book 类

package domain;

import java.math.BigDecimal; import java.io.Serializable;

 

public class Book implements Serializable{

 

privatestatic final long serialVersionUID = 1L; private long id;

private String isbn; private String title; private Categorycategory; private String author;

 

public Book(){

}

 

publicBook(long id, String isbn, String title,

Category category, String author, BigDecimal price) {this.id = id;

this.isbn = isbn; this.title = title; this.category = category;this.author = author; this.price = price;

}

 

// get and setmethods not shown

 

}

清单 5.2   Category 类

package domain;

 

import java.io.Serializable;

 

public class Category implements Serializable { privatestatic final long serialVersionUID = 1L; private int id;

private String name;

 

publicCategory() {

}

 

publicCategory(int id, String name) {


 

this.id = id; this.name = name;

}

 

// get and setmethods not shown

}

 


(笔记)Spring MVC学习指南_数据绑定和表单标签库

数据绑定和表单标签库
  • slowly_come_faster
  • slowly_come_faster
  • 2016-11-26 21:50:40
  • 1145

SpringMVC表单标签(7)

Springmvc表单标签,errors标签和textarea标签
  • fangyuylc
  • fangyuylc
  • 2015-08-13 11:29:39
  • 162

SpringMVC学习之数据绑定和表单标签库

1.数据绑定 用户输入绑定的领域模型的一种特性。类型总是String的Http请求参数,可用于填充不同类型的对象属性。用Spring的表单标签库,可以高效的使用数据绑定。数据绑定的另一个好处是:当输入...
  • Pruett
  • Pruett
  • 2017-07-24 18:11:53
  • 240

思科CCIE-王溢淇

目前,CCIE(思科认证互联网专家)持有者占思科认证总人数还不足3%,全球网络从业者的1%不到(思科官方数据)。下面一起来看看思科认证的价值意义何在? 思科认证还有价值吗?Cisco认证主要提供工程师...
  • qq_34664398
  • qq_34664398
  • 2018-04-13 12:23:34
  • 16

商业画布-v1.0王溢淇

1、商业画布与商业模式介绍商业画布之前,先介绍一下何为商业模式:用最简单的经济学来解释,指的是一个组织在财务上维持自给自足的方式。展开来说,就是为实现客户价值最大化,把能使企业运行的内外各要素整合起来...
  • qq_34664398
  • qq_34664398
  • 2018-04-13 12:19:37
  • 12

SpringMVC 数据绑定和表单标签库

数据绑定是将用户输入绑定到领域模型的一种特性。有了数据绑定,类型总是为 String 的 HTTP 请求参数,可用于填充不同类型的对象属性。数据绑定使得 form bean(如前面各章中的Produc...
  • qq_36173187
  • qq_36173187
  • 2018-04-20 10:46:50
  • 9

Struts2标签库(三)之表单标签

1.1 checkboxlist标签 checkboxlist标签可以一次创建多个复选框,用于同时生成多个的HTML标签。它根据list属性指定的集合来生成多个复选框,因此,使用该标签指定一个list...
  • owen_william
  • owen_william
  • 2016-02-21 15:27:32
  • 1333

Spring MVC表单标签库实例代码入门教程

原文:Spring MVC表单标签库实例代码入门教程 源代码下载地址:http://www.zuidaima.com/share/1825321313733632.htm 概述 ...
  • yaerfeng
  • yaerfeng
  • 2016-07-28 14:25:04
  • 3636

《数学物理方法》(梁昆淼 )

  • 2009年12月13日 01:05
  • 1.9MB
  • 下载

表单数据绑定

1. Request.Form读取表单数据     HomeController代码如下: [HandleError] public class HomeController : ...
  • bradleydan
  • bradleydan
  • 2012-09-20 13:53:04
  • 1103
收藏助手
不良信息举报
您举报文章:数据绑定和表单标签库-4.15-王溢淇
举报原因:
原因补充:

(最多只允许输入30个字)