热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DataBind数据绑定

概念数据绑定就是将请求中的参数接收到处理器即控制器中。不同类型的数据绑定简单对象自定义对象复合对象集合对象简单的对象绑定基本类型包装类型简单对象绑定代码示例@Controller(

概念

数据绑定就是将请求中的参数接收到处理器即控制器中。

不同类型的数据绑定

  • 简单对象
  • 自定义对象
  • 复合对象
  • 集合对象

简单的对象绑定

  • 基本类型
  • 包装类型

《DataBind 数据绑定》

简单对象绑定代码示例

@Controller("simpleController")
@RequestMapping("/simple")
public class SimpleController {
//基本类型绑定
@RequestMapping("/bindBase.do")
public String bindBaseType(HttpServletRequest request){
String parameter = request.getParameter("kgc");
System.out.println("获取到的参数是"+parameter);
return "success";
}
@RequestMapping("/bindBase1.do")
public String bindBaseType1(int age){
System.out.println("获取到的年龄是"+age);
return "success";
}
@RequestMapping("/bindWrap.do")
public String bindWrap(Integer age){
System.out.println("获取到的包装类型参数"+age);
return "success";
}
}

自定义对象绑定

通过参数注入方式实现数据绑定,按属性名绑定 1.提供自定义对象

/** * 学生的数据模型 * */
public class StudentModel {
//学生ID
private int studentId;
//学生姓名
private String studentName;
@Override
public String toString() {
return "StudentModel [studentId=" + studentId + ", studentName="
+ studentName + "]";
}
//getter、setter方法省略。。。
}

2.提供处理方法

/** * 自定义对象绑定示例控制器 * */
@Controller
@RequestMapping("/custorm")
public class CustormController {
//提供绑定方法
//访问路径:http://localhost:8080/DataBind//custorm/bindCustorm.do?studentId=123&studentName=%27xiaoming%27
@RequestMapping("/bindCustorm.do")
public String bindCustorm(StudentModel student){
System.out.println(student);
return "success";
}
}

复合对象绑定

通过参数注入方式进行数据绑定

  • 请求参数与自定义对象写法略有区别
  • 提供一个复合对象,即有属性是类的对象类型的

复合对象绑定代码示例

public vlass ClassModel{
private Long classId;
private String className; //学生对象
private StudentModel studet
}

参数就变成了:student.studentId=123&student.studentName=’xxx’

/** * 班级的数据模型 * */
public class ClassModel {
//班级ID
private Integer classId;
//班级名称
private String className;
//学生对象
private StudentModel student;
@Override
public String toString() {
return "ClassModel [classId=" + classId + ", className=" + className
+ ", student=" + student + "]";
}
//getter、setter方法省略。。。

/** * 复合对象的绑定示例控制器 * @author luojin * */
@Controller
@RequestMapping("/complex")
public class ComplexController {
//绑定方法
//请求路径:http://localhost:8080/DataBind//complex/bindComplex.do?classId=123&className=%27kgc%27&student.studentId=456&student.studentName=%27zhangsan%27
@RequestMapping("/bindComplex.do")
public String bindComplex(ClassModel clazz){
System.out.println("获取到的参数:"+clazz);
return "success";
}
}

集合对象绑定

  • List集合
  • Set集合
  • Map集合
  • 数组对象绑定

集合参数绑定:提供一个数据对象来进行参数收集,否则不生效
集合对象绑定代码示例

/** * 学生的list集合模型 * */
public class StudentList {
//学生集合
private List<StudentModel> students;
@Override
public String toString() {
return "StudentList [students=" + students + "]";
}
public List<StudentModel> getStudents() {
return students;
}
public void setStudents(List<StudentModel> students) {
this.students = students;
}
}

/** * 学生set模型 * */
public class StudentSet {
private Set<StudentModel> studentSet;
public StudentSet() {
studentSet=new HashSet<StudentModel>();
studentSet.add(new StudentModel());
studentSet.add(new StudentModel());
}
@Override
public String toString() {
return "StudentSet [studentSet=" + studentSet + "]";
}
public Set<StudentModel> getStudentSet() {
return studentSet;
}
public void setStudentSet(Set<StudentModel> studentSet) {
this.studentSet = studentSet;
}
}

/** * 班级的map模型 * */
public class ClassMap {
private Map<String,ClassModel> classMap;
@Override
public String toString() {
return "ClassMap [classMap=" + classMap + "]";
}
public Map<String, ClassModel> getClassMap() {
return classMap;
}
public void setClassMap(Map<String, ClassModel> classMap) {
this.classMap = classMap;
}
}

/** * 学生的数组模型 * */
public class StudentArray {
private String[] studentIds=new String[3];
@Override
public String toString() {
return "StudentArray [studentIds=" + Arrays.toString(studentIds) + "]";
}
//getter、setter方法省略
}

/** * 集合参数绑定的示例 * */
@Controller
@RequestMapping("/collection")
public class CollectionController {
//错误的写法!
@RequestMapping("/bindError.do")
public String bindError(List<String> testList){
System.out.println(testList);
return "success";
}
//list 参数绑定
//http://localhost:8080/DataBind//collection/bindList.do?students[0].studentId=110&students[3].studentName=%27kgc%27
@RequestMapping("/bindList.do")
public String bindList(StudentList studentList){
System.out.println(studentList);
return"success";
}
//set参数绑定
//请求路径:http://localhost:8080/DataBind//collection/bindSet.do?studentSet[0].studentId=110&studentSet[1].studentName=%27kgc%27
@RequestMapping("/bindSet.do")
public String bindSet(StudentSet studentSet){
System.out.println(studentSet);
return"success";
}
//map参数绑定 classMap.get(key)
//%27相当于get请求当中的引号"" ''
//请求路径:http://localhost:8080/DataBind//collection/bindMap.do?classMap[x].classId=101&classMap[x].className=%27springMVC%27&classMap[x].student.studentId=123&classMap[x].student.studentName=%27xiaoming%27
@RequestMapping("/bindMap.do")
public String bindMap(ClassMap classMap){
System.out.println(classMap);
return"success";
}
//数组的参数绑定
//请求路径:http://localhost:8080/DataBind//collection//bindArr.do?studentIds[0]=1&studentIds[1]=2&studentIds[2]=3
//真实项目当中,一般使用:?studentIds=1,2,3,4,5,6 String split();
@RequestMapping("/bindArr.do")
public String bindArr(StudentArray students){
System.out.println(students);
return"success";
}
}

数据绑定的注解

  • @RequestParam:绑定单个请求数据(最常用)
  • @PathVariable:绑定 URL 模板变量值
  • @ModelAttribute:取 model 中存的值

@RequestParam

  • 完整形式:
    @RequestParam(value=”参数名“,required=true,defaultValue=”为空时默认值”) (value 可省略)

  • 作用:可以将请求中指定的参数名映射到方法中的参数

@PathVariable

  • 完整形式:
    @PathVariable(value=”参数名”)

  • 作用:将URL中占位符中所对应变量映射到参数 《DataBind 数据绑定》

@ModelAttribute

  • 完整形式:
    @ModelAttribute(value=”参数名”)

  • 作用:可以加在方法上,表示将方法返回值封装在Model对象当中; 可以加载方法的参数前,表示将获 取到的对象,绑定到具体的参数上; 可以配合表单标签使用,表示在请求中获取参数对象

    package cn.kgc.controllers; import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam; import cn.kgc.model.ClassModel;
    import cn.kgc.model.StudentModel; /**
     * 数据绑定注解示例控制器
     * @author luojin
     *
     */
    @Controller
    @RequestMapping(&#8220;/anotation&#8221;)
    public class AnotationController {
     
     //验证RequestParam注解
     @RequestMapping(&#8220;/checkRp.do&#8221;)
     public String checkRp(
       @RequestParam(value = &#8220;kgcName&#8221;) String kgcName) {
      System.out.println(kgcName);
      return &#8220;success&#8221;;
     }
     
     //验证RequestParam注解
     @RequestMapping(&#8220;/checkPv/{id}&#8221;)
     public String checkPv(
       @PathVariable(value=&#8221;id&#8221;) String kgcId) {
      System.out.println(kgcId);
      return &#8220;success&#8221;;
     }
     
     @ModelAttribute(&#8220;dataKey&#8221;)
     public StudentModel initData(){
      StudentModel student=new StudentModel();
      student.setStudentId(123);
      student.setStudentName(&#8220;课工场&#8221;);
      return student;
     }
     
     @RequestMapping(&#8220;/getData.do&#8221;)
     public String getModelData(@ModelAttribute(&#8220;dataKey&#8221;) StudentModel stu){
      System.out.println(&#8220;model中的参数是:&#8221;+stu);
      return &#8220;success&#8221;;
     }
     
     //请求路径:http://localhost:8080/DataBind//anotation/getFormData.do?classId=123&className=kgc
     @RequestMapping(&#8220;/getFormData.do&#8221;)
     public String getFormData(@ModelAttribute(&#8220;class&#8221;) ClassModel clazz){
      System.out.println(&#8220;获取的表单对象:&#8221;+clazz);
      return &#8220;success&#8221;;
     } }


推荐阅读
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
author-avatar
rukal2502900501_324
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有