springmvc相关问题及解决方法
2015-08-31 21:29
465 查看
问题:① 数据类型的转换、格式化 ② 数据校验 ③校验后数据的处理④怎么在页面显示错误消息,以及消息的定制⑤处理json⑥为什么上传文件的表单里要加个属性enctype
解决:① 加入mvc:annotationDriven。。。,其默认创建
ConversionService的实例为FormatingConversionServiceFactoryBean;
在所需格式化的entity上加入注解(@DatetimeFormat(pattern=”yy-MM-DD”)
@NumberFormat(pattern=”#,###,###.#”
)
② ( 使用jsr303 [ hibernate validator 支持@Email @NotEmpty @length])使用注解 (@NotNull @past @future …)
步骤:加入jsr303 jar包(只要加入hibernate validator的jar);加入mvc:annotationDriven。。。,其默认创建LocaleValidatorFactoryBean;在对应的handler方法,在其所需校验的参数前(一般为某一entity实例)加入@valid注解即可
③BindingResult result原来存取验证的错误信息
注意:
需要校验的bean和其对应的BindingResult br之间不可以有其他的入参【必须连着,但可以有多高待检验的bean和result】
④ 在form中加入
即可完成错误消息的显示
定制错误消息:配置国际化资源文件(i18n.properties文件,需要配置resourceBundleMessageSource的bean),错误消息的键值对,键是校验注解的类名(Email,Past…没有@符号).对应bean在域对象中的属性名(一般是类名第一个字母小写).对应的bean中的属性名【NotEmpty.employ.lastName=lastName不可以是空值】;而值就是自己定制的错误消息
⑤ 加入jar包(三个core,databind,annotation),对应的handler方法用@responseBody注解修饰,入参使用@requestBody修饰;或者使用httpEntity《T》、responsEntity《T》{此处使用书名号。由于尖括号后面文字显示会异常}
⑥
enctype属性有三个值
1 application/x-www-form-urlencoded (默认值)
2 multipart/form-data
3 text/plain
其中1application/x-www-form-urlencoded是默认值,大家可能在AJAX里见过这个:xmlHttp.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”); 这两个要做的是同一件事情,就是设置表单传输的编码。在AJAX里不写有可能会报错,但是在HTML的form表单里是可以不写enctype=”application/x-www-form-urlencoded”的,因为默认HTML表单就是这种传输编码类型。而2multipart/form-data是用来指定传输数据的特殊类型的,主要就是我们上传的非文本的内容,比如图片或者mp3等等。3text/plain是纯文本传输的意思,在发送邮件时要设置这种编码类型,否则会出现接收时编码混乱的问题,网络上经常拿text/plain和text/html做比较,其实这两个很好区分,前者用来传输纯文本文件,后者则是传递html代码的编码类型,在发送头文件时才用得上。1和3都不能用于上传文件,只有multipart/form-data才能完整的传递文件数据。
解决:① 加入mvc:annotationDriven。。。,其默认创建
ConversionService的实例为FormatingConversionServiceFactoryBean;
在所需格式化的entity上加入注解(@DatetimeFormat(pattern=”yy-MM-DD”)
@NumberFormat(pattern=”#,###,###.#”
)
② ( 使用jsr303 [ hibernate validator 支持@Email @NotEmpty @length])使用注解 (@NotNull @past @future …)
步骤:加入jsr303 jar包(只要加入hibernate validator的jar);加入mvc:annotationDriven。。。,其默认创建LocaleValidatorFactoryBean;在对应的handler方法,在其所需校验的参数前(一般为某一entity实例)加入@valid注解即可
③BindingResult result原来存取验证的错误信息
public class Employ { private Integer id; @NotEmpty private String lastName; @Email private String email; //1表示男,2表示女 private Integer gender; private Department department; @Past @DateTimeFormat(pattern="yy-MM-dd") private Date birth; @NumberFormat(pattern="#,###,###.#") private Double salary;
//增加完成,回显数据 @RequestMapping(value="/emp",method=RequestMethod.POST) public String writeEmp(@Valid Employ employ,BindingResult br,Map<String,Object> map){ System.out.println(employ); employDao.saveEmploy(employ); System.out.println(employ); if(br.getErrorCount() > 0){ System.out.println("出错了!"); for(FieldError fe:br.getFieldErrors()){ System.out.println(fe.getField()+"--"+fe.getDefaultMessage()); } } map.put("departments", departmentDao.getDepartments()); map.put("employ", employ) ; return "input"; }
注意:
public String writeEmp(@Valid Employ employ,BindingResult br,Map<String,Object> map)
需要校验的bean和其对应的BindingResult br之间不可以有其他的入参【必须连着,但可以有多高待检验的bean和result】
④ 在form中加入
即可完成错误消息的显示
定制错误消息:配置国际化资源文件(i18n.properties文件,需要配置resourceBundleMessageSource的bean),错误消息的键值对,键是校验注解的类名(Email,Past…没有@符号).对应bean在域对象中的属性名(一般是类名第一个字母小写).对应的bean中的属性名【NotEmpty.employ.lastName=lastName不可以是空值】;而值就是自己定制的错误消息
⑤ 加入jar包(三个core,databind,annotation),对应的handler方法用@responseBody注解修饰,入参使用@requestBody修饰;或者使用httpEntity《T》、responsEntity《T》{此处使用书名号。由于尖括号后面文字显示会异常}
$(function(){ $("#testJson").click(function(){ var href = this.href; var args = {}; $.post(href,args,function(data){ for(var i=0;i<data.length;i++){ var lastName = data[i].lastName; var id = data[i].id; alert(id+" : "+lastName); } }); return false; }); })
@ResponseBody @RequestMapping(value="testJackson") public Collection<Employ> testJason(){ return employDao.getEmployees(); }
⑥
enctype属性有三个值
1 application/x-www-form-urlencoded (默认值)
2 multipart/form-data
3 text/plain
其中1application/x-www-form-urlencoded是默认值,大家可能在AJAX里见过这个:xmlHttp.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”); 这两个要做的是同一件事情,就是设置表单传输的编码。在AJAX里不写有可能会报错,但是在HTML的form表单里是可以不写enctype=”application/x-www-form-urlencoded”的,因为默认HTML表单就是这种传输编码类型。而2multipart/form-data是用来指定传输数据的特殊类型的,主要就是我们上传的非文本的内容,比如图片或者mp3等等。3text/plain是纯文本传输的意思,在发送邮件时要设置这种编码类型,否则会出现接收时编码混乱的问题,网络上经常拿text/plain和text/html做比较,其实这两个很好区分,前者用来传输纯文本文件,后者则是传递html代码的编码类型,在发送头文件时才用得上。1和3都不能用于上传文件,只有multipart/form-data才能完整的传递文件数据。
相关文章推荐
- 在线用表单建立文件夹
- Jquery 表单取值赋值的一些基本操作
- Flex中对表格某列的值进行数字格式化并求百分比添加%
- asp格式化日期时间格式的代码
- javascript 表单的友好用户体现
- js 提交和设置表单的值
- 攻克CakePHP系列二 表单数据显示
- JavaScript获取页面中表单(form)数量的方法
- 网页中表单按回车就自动提交的问题的解决方案
- Flex中对表格中某列的值进行数字格式化保留两位小数
- javascript 格式化时间日期函数代码脚本之家修正版
- js实现不提交表单获取单选按钮值的方法
- JavaScript实现重置表单(reset)的方法
- JavaScript实现同一页面内两个表单互相传值的方法
- JS中表单的使用小结
- 封装好的一个万能检测表单的方法
- javascript创建动态表单的方法
- JS+DIV+CSS实现仿表单下拉列表效果
- JQuery对表单元素的基本操作使用总结
- jquery表单对象属性过滤选择器实例分析