从来都不坦荡,情绪都写在脸上;
不开心的时候,不爱说话,笑也勉强。

课堂笔记,如果这么写,不仅仅是手速,还要有语速,

这样不太适合

--胖先生

关于数据传递:

客户端传递数据到服务端:

1.使用普通的形式

A.传递简单的数据

如果是说你传递的数据的名称跟控制层中的形参的名称不一致的情况下需要使用

注解: @RequestParam()如果存在在注解的话,那么一定要传递对应的名称,除非设置required="false"

个人建议是保存名称一致

B.传递的数据为表单的数据

(1)使用普通的表单进行提交,那么你需要注意的是 name="类中的数据",如果是说我的类中有关联的类型那么name="role.role_id",表单中含有name属性才是传递数据

(2)使用Jquery中的表单序列化操作,该操作比较方便,但是如果是日后工作当中,会只用客户端传递JSON的数据形式的字符串

2.使用的是占位符

A.使用占位符操作,那么你一般情况下需要传递简单的数据,形式如下/sys/100/tomcat

控制层当中,一定为如下的格式 /sys/{id}/{name},并且对应的形参中一定要含有@PathVariable注解

B.其实占位符可以传递复杂的数据,但是一般情况下需要你知道如何这是正则表达式

服务端传递数据到客户端:

1.一共介绍了5种形式

(1)使用原生的二阶段用request进行传递数据,需要你再方法(HttpServletRequest)形式

(2)ModelAndView

(3)方法名(Map<String,Object> map)注意这些形参对进行实例化操作

(4)方法名(ModelMap modelMap)注意你可以使用 Ctrl+T的快捷键进行查看继承的关系

(5)方法名(Model model)

(6)返回客户端的数据为JSON的格式

JavaScript Object Navtion 轻量级的传输数据格式

XML

2.关于在客户端显示数据的形式

A.使用EL表达式和JSTL标签

B.使用SpringMVC提供的标签[需要你们提醒我讲]

------------------------------------------------------------------------------

学习内容:
1.数据的格式化和@InitBinder的注解使用
2.@ModelAttribute的简单使用
3.封装【未完成

单独传递数据为日期

<h2>日期传递</h2>

<form
action="client01"
method="get">

<input
type="text"
name="mydate"
placeholder="输入日期格式">

<input
type="submit"
value="提交日期数据">

</form>

一般情况下的,日期格式我们习惯于使用YYYY-MM-DD的形式
2012-12-12的这种形式,HTTP Status 400[数据转换失败]
@DateTimeFormat(pattern="yyyy-MM-dd")这种形式的话,那么你的客户端只能传递该种形式
疑问,我想让两种形式2016.01.01格式?

@RequestMapping("/client01")

public
ModelAndView test01(@RequestParam(name="mydate") @DateTimeFormat(pattern="yyyy-MM-dd")Date date){

System.out.println(date);

return
null;

}

单独传递数据为金钱

<h2>金钱传递</h2>

<form
action="client02"
method="get">

<input
type="text"
name="money"
placeholder="输入金钱格式">

<input
type="submit"
value="提交金钱数据">

</form>

关于金钱,我们一般习惯于使用表示方法为: 1,123,000.00的形式,如果工作当中涉及到金钱操作的时候,一会使用的是为BigDecimal处理金钱,还有不能使用你了解的四舍五入,需要使用银行家的四舍五入方式

@RequestMapping("/client02")

public ModelAndView test02(@NumberFormat(pattern="#,###.##")Double money){

System.out.println(money);

return
null;

}

疑问,我想让两种形式2016.01.01||2016-10-10||2014/12/12格式?

我们需要使用对数据的处理注解,@InitBinder?

我们介绍的实现方式,现在我们只是了解其使用方式:

当你有客户数据传递的时候,那么我会进入含有标注@InitBinder的方法中

package com.shxt.controller;

import
java.awt.Component;

import
java.awt.Graphics;

import
java.awt.Rectangle;

import
java.beans.PropertyChangeListener;

import
java.beans.PropertyEditor;

import java.beans.PropertyEditorSupport;

import java.io.UnsupportedEncodingException;

import java.util.Date;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.format.annotation.DateTimeFormat;

import org.springframework.format.annotation.NumberFormat;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.WebDataBinder;

import org.springframework.web.bind.annotation.InitBinder;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.servlet.ModelAndView;

import com.shxt.model.User;

@Controller//如果是你没有命名,那么id=类名的首字母小写

public
class ClienDataController {

@RequestMapping("/client01")

public ModelAndView test01(@RequestParam(name="mydate") @DateTimeFormat(pattern="yyyy-MM-dd")Date date){//接收客户端数据,进入@InitBinder注解的方法内部

System.out.println(date);

return
null;

}

@RequestMapping("/client02")

public ModelAndView test02(@NumberFormat(pattern="#,###.##")Double money){//接收客户端数据,进入@InitBinder注解的方法内部

System.out.println(money);

return
null;

}

@RequestMapping("/client03")

public ModelAndView test03(){//没有接收客户端数据,不进入@InitBinder注解的方法内部

System.out.println("test03");

return
null;

}

@RequestMapping("/client04")

public ModelAndView test04(User user){//接收客户端数据,进入@InitBinder注解的方法内部

System.out.println("test04");

return
null;

}

@RequestMapping("/client05")

public ModelAndView test05(HttpServletRequest request){//没有接收客户端数据,不进入@InitBinder注解的方法内部

System.out.println("test05");

return
null;

}

@RequestMapping("/client06")

public ModelAndView test06(Map<String,Object> map){//没有接收客户端数据,不进入@InitBinder注解的方法内部

System.out.println("test06");

return
null;

}

@RequestMapping("/client07")

public ModelAndView test07(String shxt) throws UnsupportedEncodingException{

//如果是GET请求解决中文乱码问题,有两种方式:请自己总结一下

/*System.out.println("test07---->>"+

new String(shxt.getBytes("ISO8859-1"),"UTF-8"));*/

System.out.println("test07---->>"+shxt);

return
null;

}

@InitBinder

//当客户端传递数据的时候,并且我的控制器中的方法要接收之前,会进入该标注的方法内部进行处理

publicvoid shxt(WebDataBinder binder){

System.out.println("请注意观察该输入语句,在上面情况下输出?");

//String.class为客户端传递的数据要转换成形参所对应的那个类

binder.registerCustomEditor(String.class, new PropertyEditorSupport(){

//内部类-->>什么是Java内部类,如何使用

@Override

public
void setAsText(String text) throws IllegalArgumentException {

System.out.println("客户端传递的数据为:"+text);

setValue(text+":齐天大圣");//重新赋值

}

});

}

}

配置工具类,进行对日期的解决方案

@InitBinder//当客户端传递数据的时候,并且我的控制器中的方法要接收之前,会进入该标注的方法内部进行处理

public
void shxt(WebDataBinder binder){

binder.registerCustomEditor(Date.class, new PropertyEditorSupport(){

@Override

public
void setAsText(String text) throws IllegalArgumentException {

setValue(DateUtils.parseDate(text));

}

});

}

针对于DateUtils的工具类,默认需要使用commons-lang-2.6.jar包的支持

//注意使用这种方式去实现,自己的工具类的方式?
//可以回去自己去实现继承Map接口,实现一个HashMap,很好玩
public

class DateUtils extends org.apache.commons.lang.time.DateUtils {

private
static String[] parsePatterns = {

"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",

"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",

"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};

自定义数据的转换器如何建立,请三阶段学习完之后,再做扩展

_______________________________________________________________________________________

介绍@ModelAttribute注解方式介绍[2016/4/8 星期五 21:36]

1.模拟情景,更新操作,如下图:

这情景模式,就产生如下的模拟代码:

JSP页面代码:
<h2>用户更新</h2>

<form
action="user/update"
method="post">

<input
type="hidden"
name="_method"
value="put">

<input
type="text"
name="account"
value="wukong">

<input
type="text"
name="user_id"
value="1000">

<input
type="submit"
value="用户更新">

</form>

持久化类代码,省略getter和setter

public
class User {

private Integer user_id;

private String user_name;

private String account;

private String password;

package com.shxt.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.WebDataBinder;

import org.springframework.web.bind.annotation.InitBinder;

import
org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.servlet.ModelAndView;

import com.shxt.model.User;

@Controller

public
class UserController {

@RequestMapping(value="/user/update",method=RequestMethod.PUT)

public ModelAndView update(User user){

System.out.println(user);

return
null;

}

@RequestMapping("/shxt")

public ModelAndView test01(){

System.out.println("哈哈哈");

return
null;

}

@ModelAttribute

public
void init2(){

System.out.println("******");

}

@ModelAttribute

public
void init1(Integer user_id){

System.out.println("======"+user_id);

}

@InitBinder//想想这个使用规则?

public
void数据(WebDataBinder binder){

System.out.println("四海兴唐");

}

}

问题:在控制台输出的结果是什么?

那么我们已经搞定了上面的代码,下面我们来进行改造,代码如下:

package com.shxt.controller;

import java.util.Map;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.servlet.ModelAndView;

import com.shxt.model.User;

@Controller

public
class UserController {

@RequestMapping(value="/user/update",method=RequestMethod.PUT)

public ModelAndView update(@ModelAttribute(value="user_data")User user){

System.out.println(user);

return
null;

}

@RequestMapping("/shxt")

public ModelAndView test01(){

System.out.println("哈哈哈");

return
null;

}

@ModelAttribute

public
void init2(){

System.out.println("******");

}

@ModelAttribute

public
void init1(Integer user_id,Map<String,Object> map){

//System.out.println("======"+user_id);

if(user_id!=null){

//查询数据库,模拟通过主键查询数据库操作

System.out.println("我进来了");

User user = new User();

user.setUser_id(1000);

user.setAccount("wukong");

user.setPassword("123456");

user.setUser_name("悟空");

map.put("user_data",user);

}

}

}

看看跟之前的测试结果又什么不同!

文档下载地址:  https://yunpan.cn/cq2cam4zVjZaw  访问密码 fb28

胖先生的微信

感觉该文章对你有所帮助,请点击下方
推荐↓↓↓↓↓↓↓↓↓↓
您的支持是我最大的动力
该资料推荐给四海兴唐的各位同学,希望你们工作顺利,不管何时何地,能帮助你们是胖先生的荣幸!

第四节 数据格式化和ModelAttribute注解的介绍的更多相关文章

  1. 数据格式化和ModelAttribute注解的介绍

    关于数据传递: 客户端传递数据到服务端: 1.使用普通的形式 A.传递简单的数据 如果是说你传递的数据的名称跟控制层中的形参的名称不一致的情况下需要使用 注解: @RequestParam()如果存在 ...

  2. 第三百二十四节,web爬虫,scrapy模块介绍与使用

    第三百二十四节,web爬虫,scrapy模块介绍与使用 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了 ...

  3. 2017-12-15python全栈9期第二天第四节之格式化输出%s和用户交互个人简历模板

    #!/user/bin/python# -*- coding:utf-8 -*-name = input('姓名:')age = input('年龄:')job = input('工作:')hobbi ...

  4. 2017-12-15python全栈9期第二天第四节之格式化输出%s和个人简介模板

    #!/user/bin/python# -*- coding:utf-8 -*-msg = '''-----------info of zd----------------Name:zdage:24h ...

  5. 第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—数据收集(Stats Collection)

    第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—数据收集(Stats Collection) Scrapy提供了方便的收集数据的机制.数据以key/value方式存储,值大多是计数 ...

  6. 08_springmvc数据回显和@ModelAttribute注解详解

    一.数据回显 提交后,如果出现错误,将刚才提交的数据回显到刚才的提交页面. 二.pojo数据回显方法 1.springmvc默认对pojo数据进行回显. pojo数据传入controller方法后,s ...

  7. SpringMVC框架下数据的增删改查,数据类型转换,数据格式化,数据校验,错误输入的消息回显

    在eclipse中javaEE环境下: 这儿并没有连接数据库,而是将数据存放在map集合中: 将各种架包导入lib下... web.xml文件配置为 <?xml version="1. ...

  8. 05springMVC数据格式化

    数据格式化简介 内建的格式转换器 使用内建格式转换器示例 字段级别的解析/格式化 集成到Spring Web MVC环境 1      数据格式化简介 对属性对象的输入/输出进行格式化,其实是属于“类 ...

  9. SpringMVC(三)-- 视图和视图解析器、数据格式化标签、数据类型转换、SpringMVC处理JSON数据、文件上传

    1.视图和视图解析器 请求处理方法执行完成后,最终返回一个 ModelAndView 对象 对于那些返回 String,View 或 ModeMap 等类型的处理方法,SpringMVC 也会在内部将 ...

随机推荐

  1. [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server 不存在或访问被拒绝

    一般连接sql数据库,IP_connstr="driver={SQL Server}; server=127.0.0.1;database=数据库名字;uid=sa;pwd=密码" ...

  2. UI:UIScrollView、UIPageControl

    一.UIScrollView的常⽤用属性 二.UIScrollView的常⽤用代理方法 三.UIPageControl的使⽤用 四.UIPageControl与UIScrollView的结合使⽤用 U ...

  3. ADO与ADO.NET的区别

    ADO是使用ole db接口并基于微软的COM技术,ADO.NET使用自己的ADO.NET接口并基于微软的.NET体系架构,所以ADO.NET与ADO是两种数据访问方式. ADO以recordset存 ...

  4. gulp安装和使用简介

    一. gulp和grunt对比 grunt目前的工作流程:读文件.修改文件.写文件——读文件.修改文件.写文件——... gulp目前的工作流程:读取文件——修改文件——修改文件...——写文件 二. ...

  5. css 精灵的用法

    (从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期2014-02-12) 是指将多个图整合到一张图上,避免多次请求服务器下载. 主要使用CSS background-position 属 ...

  6. xml和xsl配合使用实例

    找到一个实际应用的例子,是英语统考打印准考证的实例,关于xml和xsl配合使用的. 下面看看xml文档 <?xml version='1.0' encoding='utf-8' ?> &l ...

  7. PostgreSQL停止动作观察

    实验过程如下: 启动一个客户端: [postgres@cnrd56 bin]$ ./psql psql () Type "help" for help. postgres=# be ...

  8. EasyUI-右键菜单变灰不可用效果

    使用过EasyUI的朋友想必都知道疯狂秀才写的后台界面吧,作为一个初学者我不敢妄自评论它的好坏,不过它确实给我们提供了一个很好框架,只要在它的基础上进行修改,基本上都可以满足我们开发的需要. 知道“疯 ...

  9. HDU 4286 Data Handler 双向链表/Splay

    Data Handler Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...

  10. Oracle DB 使用调度程序自动执行任务

    • 使用调度程序来简化管理任务 • 创建作业.程序和调度 • 监视作业执行 • 使用基于时间或基于事件的调度来执行调度程序作业 • 描述窗口.窗口组.作业类和使用者组的用途 • 使用电子邮件通知 • ...