ssm(17)参数绑定+pojo绑定+集合类型(数组绑定)

从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上

springmvc中,接收页面的提交的数据的是通过方法形参来接收的,而不是在controller类定义成员变量接收

客户端:key/value  

处理器适配器调用springmvc提供的参数绑定组件将key/value数据转成controller方法的形参,

参数绑定组件,早期适应propetyEditor(只能将字符串转成java对象),后期使用converter(进行任意类型的转换)

通常情况springmvc提供了很多的converter(转换器),特殊情况下需要自定义converter

如:后端不知时间是1999/0908 还是1999-09-09,如日期数据的绑定。

凡是形参的东西都是形参里定义的东西

默认支持类型:

model,request,response,httpsession(session),model, modelMap(它是model接口的实现类,通过model或modelmap向页面传递数据)

直接在controller方法形参上定义下边的类型对象,就可使用。在参数绑定的过程中,适配器回调组件,通过java反射判断形参类型,若是默认的一种,(底层DispatcherServlet已拿到客户端发来的形参的数据,若是这么一个东西,默认类型,就将DispatcherServlet里的数据赋值给形参里参数。

定义modelmap(modle接口的实现类,内部的for循环赋值后的map集合)与model(接口)是一样的,

作用:将model数据填充到request数据域)

简单类型绑定:

@RequestMapping("/editItems")
public String editItems(Model model,Integer id) throws Exception {
    //model要调用service获取
    ItemsCustom itemsCustom=itemsService.finItemById(id);

这里的controller的形参id必须要和request传入参数名称一致

使用了@RequestParam,则二者的参数可以不一致。用法如下:

   @RequestMapping("/editItems")
    public String editItems(Model model,@RequestParam (value = "id",required=true)Integer my_id,@RequestParam (value = "name")Integer my_name) throws Exception {
        //model要调用service获取
        ItemsCustom itemsCustom=itemsService.finItemById(my_id,my_name);

还可通过required=true属性指定其是否必传,通过defaultvalue设置默认值(比较常用,比如默认指定商品类型为“水果”,当没有值时,就按水果查,或不指定时,默认加载时,也用水果查)

 

get,post请求中文参数出现乱码解决:

web.xml中添加全局字符过滤器:

   <!-- 这是解决post提交乱码问题的解决方案-->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 

1.post表单提交乱码,可在tomcat的配置文件中加上<Connector URIEncoding="utf-8" connectionTimeout="20000"....../>

2.另一种对方法参数重新编码 String username new String(request.getParameter("username").getBytes("ISO8859-1"),"utf-8") ISO8859-1是tomcat默认编码,需将tomcat编码后的内容按utf-8再次编码

 

pojo绑定,前提是页面中的<input>的name和controller的pojo形参中的属性名称一致,将页面中数据绑定到pojo

controller的形参的类型与它一致,才会映射成功:用法如下:

   @RequestMapping("/editItems")
    public String editItems(Model model,Integer id,ItemsCustom itemsCustom) throws Exception {
        //调用service更新商品信息,页面需要将商品信息传到此方法
       // 写service的人看到缺id,但根据接口,就知道要向editItems中添加id
        //id是简单类型的绑定,ItemsCustom是pojo类型的绑定
        itemsService.updateItems(id,itemsCustom);
        return "success";

2.查询商品controller方法中实现商品查询条件传入:

2.1在形参中添加HttpservletRequest参数,通过request接收查询条件参数

2.2在形参中让包装类型的pojo接收查询条件的参数

(包装类型pojo参数类型绑定:)

分析---页面传参复杂,多样,如用户账号,商品编号,订单信息。。。这就不能放到简单的pojoli(简单pojo就是里面的类型是简单类型,int,string...包含List<?>集合类的就不是简单类型)

页面参数:商品名称。

<td>商品名称<input type="submit" value="itemsCustom.name"></td>

注意:itemsCustom和包装pojo中的属性一致即可

    @RequestMapping(value = "/editItemsSubmit",method = {RequestMethod.POST})
    public ModelAndView editItemsSubmit(HttpServletRequest request, Integer id,ItemsCustom itemsCustom,Use user)throws Exception{
        itemsService.updateItems(id,itemsCustom,user );

上面带码中,商品中的name,可能会和user中的name重复,会造成问题,不利于程序的拓展,最好写成:pojo包装类:

    @RequestMapping(value = "/editItemsSubmit",method = {RequestMethod.POST})
    public ModelAndView editItemsSubmit(HttpServletRequest request,Interger id,ItemsQueryVo itemsQueryVo)throws Exception{
        itemsService.updateItems(id,itemsQueryVo );

集合类型(数组绑定):举个用户批量删除商品的例子:

表现层,将页面多选的id,传到形参,方法形参使用数组来来接收页面请求的多个商品的id

页面定义,商品页面定义

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值