Spring MVC基础知识整理➣数据校验与格式化
概述
将view中Form的数据提交到后台之后,后台如何验证数据的有效性?在这里Spring MVC提供了相应的Hibernate类包(hibernate-validator-4.3.1.Final.jar、jboss-logging-3.1.0.jar、validation-api-1.0.0.GA.jar)来校验数据的有效性。通过实体注解的方式,添加实体的有效属性。
数据校验
将上面需要的三个包文件添加到项目WEB-INF下的Lib之后,需要配置springservletconfig.xml文件,添加下面内容:
<mvc:annotation-driven validator="validator" conversion-service="conversion-service" />
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<!--不设置则默认为classpath下的 ValidationMessages.properties -->
<property name="validationMessageSource" ref="validatemessageSource"/>
</bean>
<bean id="conversion-service" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
<bean id="validatemessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:validatemessages"/>
<property name="fileEncodings" value="utf-8"/>
<property name="cacheSeconds" value=""/>
</bean>
XML解析如下:
SpringMVC的注解驱动,采用org.springframework.validation.beanvalidation.LocalValidatorFactoryBean类包进行数据校验,验证的错误信息提示读取当前项目下的 validatemessageSource.properties。采用org.springframework.format.support.FormattingConversionServiceFactoryBean类包进行数据格式转换;
添加验证实体
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Range; public class PersonModel { /**
* @Fields name : 姓名
*/ @NotEmpty(message="{name.not.empty}")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* @Fields email : 邮箱
*/
@NotEmpty(message="{email.not.empty}")
@Email(message="{email.not.correct}")
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
/**
* @Fields age : 年龄
*/
@Range(min=,max=,message="{age.not.inrange}")
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
验证属性采用注解的方式,message读取validatemessageSource.properties设置的key值。
添加validatemessageSource.properties文件,追加内容如下,和上面model设置的message保存同步
name.not.empty=姓名不能为空
age.not.inrange=年龄不是有效范围
email.not.correct=邮箱格式不正确
email.not.empty=有效不能为空
添加From表单
Jsp头需要添加<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>才能启用Spring的控件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>数据校验</title>
</head>
<body>
<form:form modelAttribute="contentModel" method="post">
name:<form:input path="name" /><br/>
<form:errors path="name"></form:errors><br/>
age:<form:input path="age" /><br/>
<form:errors path="age"></form:errors><br/>
email:<form:input path="email" /><br/>
<form:errors path="email"></form:errors><br/>
<input type="submit" value="Submit" />
</form:form>
</body>
</html>
添加Controller接受和校验数据
@RequestMapping(value="/test", method = {RequestMethod.POST})
public String Perstest(Model model,@Valid @ModelAttribute("contentModel") PersonModel permodel,BindingResult result)
{
if(result.hasErrors())
{
return Perstest(model);
}
else
{
return "validate/ValidSucc";
}
}
其中@Valid表示添加数据校验注解,BindingResult获取绑定验证后台结果;
数据格式化
MVC-Spring格式采用的方式有2中,第一种采用注解的方式,第二种采用代码后台转换,借助Joda-Time包。
Model注解格式
需要在Model中添加格式化属性,比如@DateTimeFormat等
@NumberFormat(style=Style.CURRENCY)
private double money;
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date BirthData
在View中需要采用<spring:eval>这样的转换方式获取。记得引用<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<spring:eval expression="FUser.UserName "></spring:eval> <br/>
<spring:eval expression="FUser.UBalace "></spring:eval>
<spring:eval expression="FUser.UBirthData "></spring:eval>
</body>
</html>
采用Joda-Time包数据转换,FormattingConversionService和DefaultFormattingConversionService来完成对象的解析和格式化。
使用FormattingConversionService,实例如下:
CurrencyFormatter currencyFormatter=new CurrencyFormatter();
currencyFormatter.setFractionDigits();
currencyFormatter.setRoundingMode(RoundingMode.HALF_UP);
DateFormatter dateFormatter=new DateFormatter();
dateFormatter.setPattern("yyyy-MM-dd HH:mm:ss");
Locale locale=LocaleContextHolder.getLocale();
UserModel.setMoney(currencyFormatter.print(12345.678, locale));
UserModel.setDate(dateFormatter.print(new Date(), locale));
使用DefaultFormattingConversionService,实例如下:
FormatModel formatModel=new FormatModel();
CurrencyFormatter currencyFormatter = new CurrencyFormatter();
currencyFormatter.setFractionDigits();//保留2位小数
currencyFormatter.setRoundingMode(RoundingMode.HALF_UP);
DateFormatter dateFormatter=new DateFormatter();
dateFormatter.setPattern("yyyy-MM-dd HH:mm:ss");
DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();
conversionService.addFormatter(currencyFormatter);
conversionService.addFormatter(dateFormatter);
UserModel.setMoney(conversionService.convert(12345.678, String.class));
UserModel.setDate(conversionService.convert(new Date(), String.class));
格式化Formate格式如下:
| 名称 | 功能 |
| NumberFormatter | 实现Number与String之间的解析与格式化 |
| CurrencyFormatter | 实现Number与String之间的解析与格式化(带货币符号) |
| PercentFormatter | 实现Number与String之间的解析与格式化(带百分数符号) |
| DateFormatter | 实现Date与String之间的解析与格式化 |
| NumberFormatAnnotationFormatterFactory | @NumberFormat注解,实现Number与String之间的解析与格式化,可以通过指定style来指示要转换的格式(Style.Number/Style.Currency/Style.Percent),当然也可以指定pattern(如pattern=“#.##”(保留2位小数) ),这样pattern指定的格式会覆盖掉Style指定的格式 |
| JodaDateTimeFormatAnnotationFormatterFactory | @DateTimeFormat注解,实现日期类型与String之间的解析与格式化这里的日期类型包括Date、 |
Spring MVC基础知识整理➣数据校验与格式化的更多相关文章
- Spring MVC基础知识整理➣View与Controller数据交互
概述 Spring MVC是由View—Controller—Model组成,其中View和Controller的数据交互,成为了关注的核心点.MVC中,我们将View中的数据传递到Controlle ...
- Spring MVC基础知识整理➣拦截器和自定义注解
概述 Spring MVC中通过注解来对方法或者类进行动态的说明或者标注,类似于配置标识文件的属性信息.当标注的类或者方式被使用时候,通过提取注解信息来达到对类的动态处理.在 MVC中,我们常用的注解 ...
- Spring MVC基础知识整理➣环境搭建和Hello World
概述 Spring MVC属于SpringFrameWork的产品,采用Model-View-Controller进行数据交互,已经融合在Spring Web Flow里面.Spring 框架提供了构 ...
- Spring MVC基础知识整理➣Spring+SpringMVC+Hibernate整合操作数据库
概述 Hibernate是一款优秀的ORM框架,能够连接并操作数据库,包括保存和修改数据.Spring MVC是Java的web框架,能够将Hibernate集成进去,完成数据的CRUD.Hibern ...
- Spring MVC基础知识整理➣国际化和异常处理
概述 Spring框架为WEB项目提供了国际化以及异常处理机制.所谓的国际化也就是不同国籍,显示不同国籍的语言与符号.异常处理,也就是能够捕获WEB项目下的所有异常信息,并能处理记录这些异常信息机制. ...
- Spring框架系列(一)--Spring MVC基础知识
Web项目开发过程中一般都是使用MVC(Model-View-Controller)模式,早先的Struts2到Spring MVC,再到现在Spring Boot,都是相似的思 路.Spring B ...
- spring mvc 基础知识
spring mvc 在web.xml中的配置: 例子: <?xml version="1.0" encoding="UTF-8"?> <we ...
- Spring MVC 相关资料整理
来源于:http://www.cnblogs.com/ylhssn/p/4062757.html 1.概述 Spring MVC是一种基于Java实现MVC设计模式的请求驱动类型的轻量级Web框架,即 ...
- Kali Linux渗透基础知识整理(四):维持访问
Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...
随机推荐
- addEventListener() 方法,事件监听
知识点1:addEventListener() 方法,事件监听,可以使用 removeEventListener() 方法来移除事件的监听. 语法 element.addEventListener(e ...
- http 遇到中文表单 转码
#include <string> #include <vector> inline BYTE toHex(const BYTE x) { return x>9?x+55 ...
- 如何在同一台电脑上使用两个github账户(亲测有效)
1 前言 由于有两个github账号,要在同一台电脑上同步代码,需要给每一个账号添加一个SSH public key,此时推送时git push origin,不知道是哪个账号的远程仓库名称,所以需要 ...
- [C]变量作用域
函数环境变量作用域 C语言栈环境变量作用域跟JS是类似的. 就是内部函数可以访问外部函数的执行(栈)环境变量. 当访问一个变量时,程序将会查询当前栈环境是否存在这个变量,如果没有,将会往上层栈环境继续 ...
- npm i 和 npm install 的区别
实际使用的区别点主要如下(windows下): 1. 用npm i安装的模块无法用npm uninstall删除,用npm uninstall i才卸载掉 2. npm i会帮助检测与当前node版本 ...
- (转)整理 node-sass 安装失败的原因及解决办法
转载地址:https://segmentfault.com/a/1190000010984731
- robot启动
可以这句写入到bat文件里 pythonw.exe -c "from robotide import main; main()"
- FTP服务器配置和管理
一:ftp 简介 1:ftp服务: internet 是一个非常复杂额计算机环境,其中有pc/mac/小型机/大型机等.而在这些计算机上运行的操作系统也是五花八门,有 unix.Linux.微软的wi ...
- Confluence 6 那些文件需要备份
备份整个 home 目录是最安全的选项.但是,有很多目录是在 Confluence 启动的时候创建的并且也是可以忽略的.不管那些文件夹可以忽略,下面的文件夹必须进行备份才能回复: <conf-h ...
- Django框架之第三篇模板语法(重要!!!)
一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django 模板中遍历复杂数据结构的关键 ...