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

    数据类型的绑定

    什么叫做数据类型的绑定?
    类似于struts的参数注入,从客户端请求key/value数据,通过参数绑定,把key/value绑定在Controller方法的形参上。
    springmvc中,接受页面提交的数据是通过方法行形参来接收,而不是在controller类定义成员变量接受!!!!
    执行流程:
    客户端请求key/value --->处理器适配器提供参数绑定组件将key/value数据转化成controller方法的形参。参数绑定组件:在springmvc早起版本使用PropertyEditor(只能将字符串转化为java对象),后期使用converter(进行任意类型的转换),springmvc提供了很多controller,在特殊情况下需要自定义controller,例如日期数据绑定

    默认支持绑定的类型:
    直接在controller方法形参上定义下边2类型的对象,就可以使用这些对象。在参数绑定过程中,如果玉带下边类型直接绑定。
    1、HttpServletRequest
    2、HttpServletResponse
    3、HttpSession
    4、Model/ModelMap
    为什么上面的可以直接绑定呢?我们知道springmvc是基于Servlet的,所以servletDispatcher中直接能得到的request、response、session就可以直接绑定了。我们查看源码发现,model的作用是将数据填充到request域,也就是说类似于一个缓存区一样,modelMap是model接口的实现类,所以model和modelMap可以直接绑定。

    简单类型的绑定
    1、直接绑定
    要求controller形参名和request中的传入参数名一致。
    2、使用@RequestParam注解
    不需要形参名和request传入参数名一致
    作用于参数,三个属性:value(必选),defaultValue(可选),required(可选)
    value的值为request中的传入参数名,绑定注解作用的那个变量
    required的值为true的时候框架会给我们加一个validate验证,如果该参数没有传入报错400不能没有指定参数
    defaultValue都懂
    小例子:
    @ResultMapping(value="/editItems",method={RequestMethod.POST,RequestMethod.GET})
    public String editItems(Model model,@RequestParam(value="id",required=true) Integer items_id) throws Exception{
    //...
    }

    POJO类型的绑定
    只有表单元素的name和pojo类型属性名一致才能注入。

    数组的绑定:

      要求:前台传递的数据类型和后台数组的类型相同

      前端页面的name属性与后台数组名相同即可。

      <c:forEach items="${users}" var="us">
    
        <tr>
    
        <td><input type="checkbox" name="id_items" value="${us.id}" ></td>
    
        <td>...</td>
    
        </tr>  
    
      </c:forEach>
    
      public deleteBatch(Integer[] id_items){
    
      }

    list的参数绑定

    list参数绑定的是pojo类型,也就是实现List<pojo>的参数注入。

    需要借助pojo对象,然后在pojo对象中的list集合属性为List<pojo>。有点绕,就是list参数绑定实现的是绑定pojo中的list集合,实现集合中的pojo注入。

    要求:

    public Class UserVo{
      private List<user> userItems;  
        ...
    }

    @RequestMapping("/...")
    public String AddUserBatch(UserVo uservo){
    ...
    }

    ...
    <tr>

      <td><input name="userItems[${status.index}].name" value="${item.name}"></td>
      <td>
    <input name="userItems[${status.index}].pwd" value="${item.pwd}"></td> 
      <td>
    <input name="userItems[${status.index}].createTime" value="${item.createTime}"></td>

    </tr>

    页面中的userItems为UserVo中list属性名,[${status.index}]因为list内部是数组结构代表数组的下标,.name表示集合内pojo的属性名

    map的参数绑定

    和list参数绑定类似,借助pojo。就是实现在pojo的map属性中值的注入。

    例子:

    public class userVo{
      private Map mp;
      ...    
    }

    @RequestMapping("/...")
    public String test(UserVo uservo){
      ...
    }

    ...
    <tr>
      <td>姓名:</td>
      <td><input type="text" name="mp['name']"/></td>
      <td>年龄</td>
      <td><input type="text" name="mp['price']"/></td>
    </tr>

    说明:mp表示vo类中的map属性的属性名,['name']里面的name表示map的key

  • 相关阅读:
    Wiin10 深色模式 暗色 省电 经济 护眼dark mode energy saving ecol
    云主机终端现实中文
    systemctl enable与systemctl start的区别
    centos技巧
    用国内的vps登录亚马逊的ec2
    小米 redmi note 8 打开开发者选项
    javascript数组、对象和Null的typeof同为object,区分解决办法
    组件中是否可以判断slot是否有内容?
    xlsx-style 行高设置
    修改xlsx-style 源码 解决报错
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/6100043.html
Copyright © 2011-2022 走看看