• Springmvc参数绑定


    第1章 Springmvc参数绑定

    1.1 概述

    1.1.1 注解介绍:

    @RequestParam(value="id",defaultValue="1",required = true)用于映射路径的参数

    Value:代表参数名

    defaultValue:用于设置参数的默认值,如果参数值为空,就会传入这个默认值

    required:表示规定这个参数必须有这个参数

    1.1.2 HandlerController中的方法)参数列表中默认能接收的参数类型

    HttpServletRequest HttpServletResponse HttpSessionModel/ModelMap

     

    1.2 绑定简单的数据类型参数

    支持的数据类型:

    参数类型推荐使用包装数据类型,因为基础数据类型不可以为null

    整形:Integerint

    字符串:String

    单精度:Floatfloat

    双精度:Doubledouble

    布尔型:Booleanboolean

    说明:对于布尔类型的参数,请求的参数值为truefalse

    处理器方法:

    public String editItem(Model model,Integer id,Boolean status) throws Exception

    请求url

    http://localhost:8080/xxx.action?id=2&status=false

     

    @RequestMapping("/itemEdit")

    public String editItem(@RequestParam(value="id",defaultValue="1",required = true)Integer ids, Model model) {

    Items items = itemService.getItemById(ids);

    //把数据传递给页面

    model.addAttribute("item", items);

    //返回逻辑视图

    return "editItem";

    } 

    也可以直接在参数列表中直接写,只要参数的名字和请求中传递的参数名一致就能接收

     

    1.3 绑定pojo数据类型的参数

    代码:

    @RequestMapping("/updateitem")

    public String updateItem(Items items) {

    itemService.updateItem(items);

    //返回成功页面

    return "success";

    }

    注意:提交的表单中不要有日期类型的数据,否则会报400错误。如果想提交日期类型的数据需要用到后面的自定义参数绑定的内容

    1.4 (自定义参数绑定)解决提交表单时日期转换类型

    分析:

    因为日期传递过来的是String类型,所以会出现类型转换错误

    需要编写一个工具类,将字符串转换Date方法

    package cn.peihua.springmvc.utils;

     

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

     

    import java.text.ParseException;

    import java.text.SimpleDateFormat;

    import java.util.Date;

     

    public class DateConverter implements Converter<String,Date> {

     

        @Override

        public Date convert(String source) {

            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

            try {

                return simpleDateFormat.parse(source);

            } catch (ParseException e) {

                e.printStackTrace();

            }

            return null;

        }

    }

    然后在springmvc.xml中进行配置

    配置日期转换器的bean

    <!--配置日期转换器-->

     <bean id = "formattingConversionService" class = "org.springframework.format.support.FormattingConversionServiceFactoryBean">

         <property name="converters">

             <set>

                 <bean class = "cn.peihua.springmvc.utils.DateConverter"></bean>

             </set>

         </property>

     </bean>

    然后在注解驱动注册中加入

     

    <!-- 配置注解驱动,如果配置此标签相当于配置了处理器映射器和适配器 -->

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

    1.5 解决post乱码问题

    web.xml中加入

    <filter>

    <filter-name>CharacterEncodingFilter</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>

    </filter>

    <filter-mapping>

    <filter-name>CharacterEncodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

    </filter-mapping>

    以上可以解决post请求乱码问题。

    对于get请求中文参数出现乱码解决方法有两个:

    修改tomcat配置文件添加编码与工程编码一致,如下:

    <Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

     

    另外一种方法对参数进行重新编码:

    String userName new

    String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")

     

    ISO8859-1tomcat默认编码,需要将tomcat编码后的内容按utf-8编码

     

     

    1.6 绑定pojo包装类

    定义一个包装的pojo类

    package cn.peihua.springmvc.pojo;

     

    public class QueryVo {

     

    private Items items;

     

    public Items getItems() {

    return items;

    }

     

    public void setItems(Items items) {

    this.items = items;

    }

     

    }

     

    编写controlle层handler,直接将QueryVo 写在参数列表上即可

    @RequestMapping("/queryitem")

    public String queryItem(QueryVo queryVo) {

    //打印绑定结果

    System.out.println(queryVo.getItems().getName());

    System.out.println(queryVo.getItems().getPrice());

     

    return null;

    }

    在页面中传递参数需要在属性.属性的方式进行传递

     

     

     



  • 相关阅读:
    修改 MyEclipse 中的 jsp 和 servlet 模板
    javaWeb 数据库连接池连接数据库
    发现一个类的方法不够用时,可以使用的3种方法可以增强
    使用 greenDao 框架 操作数据库
    Android之使用Volley框架在ListView中加载大量图片
    js日期选择控件
    mysql 乱码问题
    java 使用反射技术解耦
    javaWeb 使用jsp开发 html过滤标签
    javaWeb 使用jsp开发 foreach 标签
  • 原文地址:https://www.cnblogs.com/toby-ruan/p/9080327.html
Copyright © 2020-2023  润新知