新澳门萄京娱乐场官网

当前位置:新萄京娱乐场手机版 > 新澳门萄京娱乐场官网 > 而诉求中包罗部分多少,而乞请中蕴涵部分数据

而诉求中包罗部分多少,而乞请中蕴涵部分数据

来源:http://www.chrisproduction.com 作者:新萄京娱乐场手机版 时间:2019-10-09 00:13

世家好,小编是IT修真院伯尔尼分院第6期的学员,一枚正直纯洁善良的JAVA程序猿前几日给我们分享一下, SpringMVC 的参数绑定

SpringMVC详解(五)------参数绑定,springmvc------

  参数绑定,简来讲之正是顾客端发送央浼,而诉求中满含部分数码,那么这一个数量怎么达到Controller ?那在骨子里项目开采中也是用到的最多的,那么 SpringMVC 的参数绑定是怎么落到实处的吗?上面大家来详细的疏解。

 

1.背景介绍

1、SpringMVC 参数绑定

  在 SpringMVC 中,提交供给的数额是通过措施形参来接收的。从客商端诉求的 key/value 数据,经过参数绑定,将 key/value 数据绑定到 Controller 的形参上,然后在 Controller 就可以直接行使该形参。

  图片 1

  这里提到到参数绑定组件,那么哪些是参数组件,这里能够先了然为将呼吁的多少调换为大家须要的数据称为参数绑定组件,也正是参数绑定转变器。SpringMVC 内置了无数参数转变器,独有在极少数气象下要求大家自定义参数转变器。

 

参数绑定,轻易的话正是客商端发送央浼,而央求中富含部分数额,那么这几个数量怎么达到Controller ?那在事实上项目开支中也是用到的最多的,那么 SpringMVC 的参数绑定是怎么落到实处的啊?

 2、暗中同意支持的品种

  SpringMVC 有帮助的暗中同意参数类型,我们直接在形参上付出那个默许类型的宣示,就能够一贯利用了。如下:

  ①、HttpServletRequest 对象

  ②、HttpServletResponse 对象

  ③、HttpSession 对象

  ④、Model/ModelMap 对象 

  Controller 代码:

@RequestMapping("/defaultParameter")
 public ModelAndView defaultParameter(HttpServletRequest request,HttpServletResponse response,
       HttpSession session,Model model,ModelMap modelMap) throws Exception{
  request.setAttribute("requestParameter", "request类型");
  response.getWriter().write("response");
  session.setAttribute("sessionParameter", "session类型");
  //ModelMap是Model接口的一个实现类,作用是将Model数据填充到request域
  //即使使用Model接口,其内部绑定还是由ModelMap来实现
  model.addAttribute("modelParameter", "model类型");
  modelMap.addAttribute("modelMapParameter", "modelMap类型");

  ModelAndView mv = new ModelAndView();
  mv.setViewName("view/success.jsp");
  return mv;
 }

  表单代码:(截取首要代码)

<body>
 request:${requestParameter}
 session:${sessionParameter}
 model:${modelParameter}
 modelMap:${modelMapParameter}
</body>

  然后访问,页面突显如下:

  图片 2

  这里我们注重说一下 Model/ModelMap,ModelMap是Model接口的一个贯彻类,功用是将Model数据填充到request域,就算选择Model接口,当中间绑定依旧由ModelMap来完成

 

2.文化深入分析

 3、基本数据类型的绑定

  哪些是主导数据类型,大家这里再一次计算一下: 

一、byte,占用一个字节,取值范围为 -128-127,默认是“u0026rdquo;,表示空
二、short,占用两个字节,取值范围为 -32768-32767
三、int,占用四个字节,-2147483648-2147483647
四、long,占用八个字节,对 long 型变量赋值时必须加上"L"或“l”,否则不认为是 long 型
五、float,占用四个字节,对 float 型进行赋值的时候必须加上“F”或“f”,如果不加,会产生编译错误,因为系统
自动将其定义为 double 型变量。double转换为float类型数据会损失精度。float a = 12.23产生编译错误的,float a = 12是正确的
六、double,占用八个字节,对 double 型变量赋值的时候最好加上“D”或“d”,但加不加不是硬性规定 
七、char,占用两个字节,在定义字符型变量时,要用单引号括起来
八、boolean,只有两个值“true”和“false”,默认值为false,不能用0或非0来代替,这点和C语言不同

  大家以 int 类型为例:

  JSP 页面代码:

<form action="basicData" method="post">
 <input name="username" value="10" type="text"/>
 <input type="submit" value="提交">
</form>

  Controller 代码:

@RequestMapping("/basicData")
 public void basicData(int username){
  System.out.println(username);//10
 }

  结果是 打印出了表单里面包车型大巴 value 的值。

  注意:表单中input的name值和Controller的参数变量名保持一致,就能够一呵而就多少绑定。那么只要分裂呢?大家利用 @RequestParam 注脚来实现,如下:

  JSP页面代码不改变,<input name="username">保持原样,Controller 代码如下

  图片 3

  使用注解 @RequestParam ,咱们得以采取放肆形参,可是注脚里面包车型大巴 value 属性值要和表单的name属性值同样。

 

  难题:我们那边的参数是主导数据类型,若是在此之前台页面传递的值为 null 只怕“”的话,那么会并发数量转变的十二分,正是必需保险表单传递过来的多寡无法为null或”",所以,在支付进度中,对大概为空的数量,最棒将参数数据类型定义成包装档期的顺序,具体参见上边包车型客车事例。

 

参数绑定

4、包装数据类型的绑定

   包装等级次序如Integer、Long、Byte、Double、Float、Short,(String 类型在那也是适用的)这里大家以 Integer 为例

  Controller 代码为:

  图片 4

  和基本数据类型基本同样,分化之处在于,表单传递过来的数据可以为null或”",以地点代码为例,即使表单中num为”"也许表单中无num那个input,那么,Controller方法参数中的num值则为null。

 

在 SpringMVC 中,提交乞请的数目是透过措施形参来接收的。从顾客端央浼的 key/value 数据,经过参数绑定,将 key/value 数据绑定到 Controller 的形参上,然后在 Controller 就足以一贯运用该形参。

5、POJO(实体类)类型的绑定

  User.java

package com.ys.po;

import java.util.Date;

public class User {
    private Integer id;

    private String username;

    private String sex;

    private Date birthday;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username == null ? null : username.trim();
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex == null ? null : sex.trim();
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

  JSP页面:潜心输入框的 name 属性值和方面 POJO 实体类的习性保持一致就能够映射成功。

<form action="pojo" method="post">
  用户id:<input type="text" name="id" value="2"></br>
  用户名:<input type="text" name="username" value="Marry"></br>
  性别:<input type="text" name="sex" value="女"></br>
  出生日期:<input type="text" name="birthday" value="2017-08-25"></br>
  <input type="submit" value="提交">
 </form>

  注意看:那中间大家多少都写死了,直接付出。有Integer类型的,String类型的,Date类型的。

  Controller :

@RequestMapping("/pojo")
 public void pojo(User user){
  System.out.println(user);
 }

  大家在上面代码打个断点,然后输入UENCOREL,步入到那个Controller中:

图片 5

  上边是报错了,User.java 的birthday 属性是 Date 类型的,而大家输入的是字符串类型,故绑定不了

   那么难点来了,Date 类型的数码绑定失利,怎样消除那样的主题材料吗?那正是我们如今所说的急需自定义Date类型的转变器。

  ①、定义由String类型到 Date 类型的转换器

package com.ys.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;

//需要实现Converter接口,这里是将String类型转换成Date类型
public class DateConverter implements Converter<String, Date> {

 @Override
 public Date convert(String source) {
  //实现将字符串转成日期类型(格式是yyyy-MM-dd HH:mm:ss)
  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  try {
   return dateFormat.parse(source);
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  //如果参数绑定失败返回null
  return null;
 }

}

  ②、在 springmvc.xml 文件中铺排调换器

<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

 <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
  <property name="converters">
   <!-- 自定义转换器的类名 -->
   <bean class="com.ys.util.DateConverter"></bean>
  </property>
 </bean>

  输入 U奥德赛L,再度查看Controller的形参:

  图片 6

 

 

图片 7

6、复合POJO(实体类)类型的绑定

  这里我们扩大贰个实体类,ContactInfo.java

package com.ys.po;

public class ContactInfo {
    private Integer id;

    private String tel;

    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel == null ? null : tel.trim();
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address == null ? null : address.trim();
    }
}

  然后在地方的User.java中扩展八个属性 private ContactInfo contactInfo

  图片 8

  JSP 页面:注意属性name的命名,User.java 的复合属性名.字段名

   图片 9

      

  Controller

  图片 10

  User对象中有ContactInfo属性,不过,在表单代码中,要求选择“属性名(对象类型的品质).属性名”来定名input的name。

 

 

 

 

此处涉及到参数绑定组件这里能够先知道为将呼吁的数目转变为大家供给的数码称为参数绑定组件,也正是参数绑定调换器。SpringMVC 内置了累累参数转变器,唯有在极少数状态下须求大家自定义参数调换器。

7、数组类型的绑定

  必要:大家询问出所有User 的新闻,况兼在JSP页面遍历突显,那时候点击提交按键,须求在 Controller 中取得页面中显得 User 类的 id 的全数值的数组集结。

  JSP 页面:瞩目客商id的name值定义为 userId

  图片 11

  Controller.java

  图片 12

 

 

3.广泛难题

8、List类型的绑定

  必要:批量修改 User 顾客的新闻

  第一步:创建 UserVo.java,封装 List<User> 属性

package com.ys.po;

import java.util.List;

public class UserVo {

 private List<User> userList;
 public List<User> getUserList() {
  return userList;
 }
 public void setUserList(List<User> userList) {
  this.userList = userList;
 }
}

  第二步:为了简化进程,大家平素从 Controller 中查询全体 User 新闻,然后在页面显示

  Controller

@RequestMapping("selectAllUserAndList")
 public ModelAndView selectAllUserAndList(){
  List<User> listUser = userService.selectAllUser();
  ModelAndView mv = new ModelAndView();
  mv.addObject("listUser", listUser);
  mv.setViewName("list.jsp");
  return mv;
 }

  JSP 页面

图片 13

 

  第三步:修改页面包车型大巴值后,点击提交

  图片 14

  由于大家在 JSP 页面 input 输入框定义的name属性名是 userList[${status.index}].id 这种样式的,这里我们直接用 UserVo 就会博得页面批量交到的 User音讯

 

PostMan结合参数绑定演示

8、Map类型的绑定

  首先在 UserVo 里面扩张壹本性能 Map<String,User> userMap

   图片 15

  第二步:JSP页面,注意看 <input >输入框 name 的属性值

  图片 16

 

   第三步:Controller 中收获页面包车型客车属性

图片 17

 

 

4.消除方案

9、碰到的标题

  ①、form表单不恐怕提交input输入框属性设置为 disabled 的剧情

  比如:

<input type="text" disabled="disabled" name="metadataName"   maxlength="50" placeholder="这里输入模型英文名称" title="模型英文名称" "/>

  具有 disabled="disabled" 的属性,提交到 Controller后,metadataName 的值为null

  消除办法:改为 readonly="readonly"

  readonly:针对input(text / password)和textarea有效,在设置为true的图景下,客商能够得到大旨,不过无法编辑,在付给表单时,输入项会作为form的原委提交。

  disabled:针对所有表单成分(select,button,input,textarea等),在设置为disabled为true的情景下,表单输入项不能够博得主旨,客户的享有操作无意义,在提交表单时,表单输入项不会被交给。

 

参数绑定,一言以蔽之正是顾客端发送央浼,而央浼中含有部分多少,那么那么些数据怎么达到...

5.编码实战

6.扩张思虑

7.参谋文献

8.越多商讨

PPT:

视频:

undefined_Tencent摄像

本文由新萄京娱乐场手机版发布于新澳门萄京娱乐场官网,转载请注明出处:而诉求中包罗部分多少,而乞请中蕴涵部分数据

关键词:

上一篇:没有了

下一篇:5.编码实战