zoukankan      html  css  js  c++  java
  • SpringMVC---参数绑定

      最近项目中用到SpringMVC,它有一个很好的功能叫做参数绑定,也即与前端约定好一些特殊的规则,然后在后台写Controller方法的时候,可以不需要使用request.getparameter("key")之类笨拙的方法来取前端参数...,当然这个参数绑定的功能并不是SpringMVC独一无二的神器,Strust2也包含同样的功能,但是本文主要以SpringMVC为例。

    正文

      为了便于说明该功能,我们首先创建一个Model,Stu表示学生类

     1 public class Stu {
     2 
     3     private int number;//学号
     4     private String name;//姓名
     5 
     6     public int getNumber() {
     7         return number;
     8     }
     9 
    10     public void setNumber(int number) {
    11         this.number = number;
    12     }
    13 
    14     public String getName() {
    15         return name;
    16     }
    17 
    18     public void setName(String name) {
    19         this.name = name;
    20     }
    21 }

       随后我们再创建一个Controller类,用于与前端交互,大致如下,StuController

    1 @Controller
    2 public class StuController {
    3 
    4     @RequestMapping("/..")
    5     public String method(Stu stu) {
    6         return "../..";
    7     }
    8 }

      这里我们用一个stu对象来当做参数,只要和前端规定好某种约束规则,那么SpringMVC将会自动的帮我们进行参数绑定,也即会从request对象中取出参数,然后自动组装成stu对象传入method()方法中。这很大程度上简化了Controller的代码,使得项目的代码结构更加优雅...

      刚才一直提到某种特殊约定,那么究竟是什么特殊约定呢?接下来将为您揭晓...请看这段HTML

    1 <form action="/..">
    2     <input name="number" value="123"/>
    3     <input name="name" value="csa" />
    4     <input type="submit" value="Save" />
    5 </form>

      其实只需要在form表单标签的nama与stu对象中的属性保持一致就可以,这样当前端传递参数的时候,会形类似于这样的数据 -- name="csa"&&number="123" -- 这样当springMVC拿到数据之后,会尝试调用setName()与setNumber)()方法,这样就很容易将参数包装成stu对象了~~

      上述表示的都是简单的数据类型,如果一个对象中包含一个数组,打个比方stu对象中还包含一个属性int[]  score,那这个成绩该如何传参呢?其实它也很简单...

    1 <form action="/..">
    2     <input name="number" value="123"/>
    3     <input name="name" value="csa" />
    4     <input name="score" value="69" />
    5     <input name="score" value="70" />
    6     <input name="score" value="71" />
    7     <input type="submit" value="Save" />
    8 </form>

       没错,你没有看错...就是将相同的标签名name都设置成score即可...这样在springMVC自动注入的时候,就会注入成一个int数组了,其实这个方法真心不优雅...利用Ajax会让这个功能变得更加完美

    $.ajax({
        dataType: "json",
        url: '../..',
        type: 'POST',
        data: {
            number:"123",
            name:"csa",
            score:["69","70","71"]
        },
        traditional: true,
        success: function (data) {
            console.log("success");        
        },
        error: function () {
            console.log("error");  
        }
    }); 

      利用Ajax就会很优雅的封装数组对象,然后springMVC会接受这个参数,然后封装成stu对象,被后台程序调用...还有,在写Ajax的时候,要加上traditional:true这句话,否则会报错的哦~具体原因请求助度娘。

      此时我们已经可以成功绑定基本数据类型和基本的数组类型了,那么该如何绑定复杂的引用类型呢?举个例子,假设stu对象中还有一个属性Teacher teacher,teacher里面就两个属性age与name吧,那要如何传递参数,让stu中的teacher也自动绑定呢?

     1 <form action="/..">
     2     <input name="number" value="123"/>
     3     <input name="name" value="csa" />
     4     <input name="score" value="69" />
     5     <input name="score" value="70" />
     6     <input name="score" value="71" />
     7     <input name="teacher.age" value="24" />
     8     <input name="teacher.name" value="lqq" />
     9     <input type="submit" value="Save" />
    10 </form>

      看到上面的form表单了吗?是不是很容易理解...

  • 相关阅读:
    使用Power Shell 拉取项目源代码
    C# 读取excel数据到datatable
    C# 导出datatable数据到excel
    redis过一段时间连接不上
    windows10 docker volume
    通过端口查询到应用
    centos清理磁盘
    maven镜像加速
    IDEA常用插件
    java开发常用软件
  • 原文地址:https://www.cnblogs.com/sachen/p/6740791.html
Copyright © 2011-2022 走看看