• SpringMVC框架的注解如何使用?


    SpringMVC 参数绑定的方式

    • 基本数据类型、字符串数据绑定
    • 数组类型
    • vo 类型
    • list 类型
    • set 类型
    • Map 类型数据
    • 自定义复合类型

    案例实操

    请求参数到处理器功能处理方法的方法参数上的绑定,对于参数绑定非常灵活

    a).基本数据类型、字符串数据绑定

    /** 
    
    * 简单数据类型 值必须存在 不传可以通过默认值代替 
    
    */ 
    
    @RequestMapping("data1") 
    
    public void data1(@RequestParam(defaultValue="10",name="age")int age, 
    @RequestParam(defaultValue="1",name="flag")boolean flag, 
    @RequestParam(defaultValue="100",name="s")double s){ 
    
    	System.err.println("age:"+age+":flag:"+flag+":s:"+s); 
    
    } 
    
    /** 
    
    * 包装类型 值可以为空 
    
    */ 
    
    @RequestMapping("data2") 
    
    public void data2(Integer age,Double s){ 
    
    	System.err.println("age:"+age+":s:"+s); 
    
    } 
    
    /** 
    
    * 字符串注入 
    
    * @param str 
    
    */ 
    
    @RequestMapping("data3") 
    
    public void data3(String str){ 
    
    	System.err.println("str:"+str); 
    
    } 
    

    b).数组类型

    @RequestMapping("/dataTest3") 
    
    public void getParamsData3(@RequestParam(value="ids")String[] ids){ 
    
        for(String id:ids){ 
    
        	System.out.println(id+"---"); 
    
        } 
    
    } 
    

    c).vo 类型

    @RequestMapping("/dataTest4") 
    
    public void getParamsData4(User user){ 
    
    	System.out.println(user); 
    
    } 
    

    d).list 类型

    此时 user 实体需要定义 list 属性

    import java.util.ArrayList; 
    
    import java.util.List; 
    
    public class User { 
    
        private int id; 
    
        private String userName; 
    
        private String userPwd; 
    
        private List<Phone> phones=new ArrayList<Phone>(); 
    
        public List<Phone> getPhones() { 
    
        	return phones; 
    
        } 
    
        public void setPhones(List<Phone> phones) { 
    
        	this.phones = phones; 
    
        } 
    
        public int getId() { 
    
        	return id; 
    
        } 
    
        public void setId(int id) { 
    
        	this.id = id; 
    
        } 
    
        public String getUserName() { 
    
        	return userName; 
    
        } 
    
        public void setUserName(String userName) { 
    
        	this.userName = userName; 
    
        } 
    
        public String getUserPwd() { 
    
        	return userPwd; 
    
        } 
    
        public void setUserPwd(String userPwd) { 
    
        	this.userPwd = userPwd; 
    
        } 
    
        @Override 
    
        public String toString() { 
    
        	return "User [id=" + id + ", userName=" + userName + ", userPwd=" 
    
        + userPwd + ", phones=" + phones + "]"; 
    
        } 
    
    } 
    

    Phone 实体

    public class Phone { 
    
        private String num; 
    
        public String getNum() { 
    
        	return num; 
    
        } 
    
        public void setNum(String num) { 
    
        	this.num = num; 
    
        } 
    
        @Override 
    
        public String toString() { 
    
        	return "Phone [num=" + num + "]"; 
    
        } 
    
    }
    

    Jsp 页面定义

    <form action="dataTest5.do" method="post"> 
    
        <input name="phones[0].num" value="123456" /> 
    
        <input name="phones[1].num" value="4576" /> 
    
        <button type="submit"> 提交</button> 
    
    </form> 
    

    Controller 方法:

    @RequestMapping("/dataTest5") 
    
    public void getParamsData5(User user){ 
    
    	System.out.println(user); 
    
    } 
    

    e).set 类型

    ​ set 和 List 类似,也需要绑定在对象上,而不能直接写在 Controller 方法的参数中。但是,绑定 Set 数据时,必须先在 Set 对象中 add 相应的数量的模型对象。

    无序存储的原因

    public class User { 
    
        private int id; 
    
        private String userName; 
    
        private String userPwd; 
    
        private Set<Phone> phones=new HashSet<Phone>(); 
    
        public User() { 
    
            phones.add(new Phone()); 
    
            phones.add(new Phone()); 
    
            phones.add(new Phone()); 
    
        } 
    
        public int getId() { 
    
        	return id; 
            
        } 
    
        public void setId(int id) { 
    
        this.id = id; 
    
        } 
    
        public String getUserName() { 
    
        	return userName; 
    
        } 
    
        public void setUserName(String userName) { 
    
        	this.userName = userName; 
    
        } 
    
        public String getUserPwd() { 
    
        	return userPwd; 
    
        } 
    
        public void setUserPwd(String userPwd) { 
    
        	this.userPwd = userPwd; 
    
        } 
    
        public Set<Phone> getPhones() { 
    
        	return phones; 
    
        } 
    
        public void setPhones(Set<Phone> phones) { 
    
        	this.phones = phones; 
    
        } 
    
    }
    

    Controller 方法:

    @RequestMapping("/dataTest6") 
    
    public void getParamsData6(User user){ 
    
    	System.out.println(user); 
    
    } 
    

    表单页面

    <form action="dataTest6.do" method="post"> 
    
        <input name="phones[0].num" value="123456" /> 
    
        <input name="phones[1].num" value="4576" /> 
    
        <input name="phones[2].num" value="4576" /> 
    
        <button type="submit"> 提交</button> 
    
    </form> 
    

    f).Map 类型数据

    Map 最为灵活,它也需要绑定在对象上,而不能直接写在 Controller 方法的参数中。

    public class User { 
    
        private int id; 
    
        private String userName; 
    
        private String userPwd; 
    
        private Set<Phone> phones=new HashSet<Phone>(); 
    
        private Map<String, Phone> map=new HashMap<String, Phone>(); 
    
    	public User() { 
    
            phones.add(new Phone()); 
    
            phones.add(new Phone()); 
    
            phones.add(new Phone()); 
    
        }  
    
        public int getId() { 
    
        	return id; 
    
        } 
    
        public void setId(int id) { 
    
        	this.id = id; 
    
        } 
    
        public String getUserName() { 
    
        	return userName; 
    
        } 
    
        public void setUserName(String userName) { 
    
        	this.userName = userName; 
    
        } 
    
        public String getUserPwd() { 
    
        	return userPwd; 
    
        } 
    
        public void setUserPwd(String userPwd) { 
    
        	this.userPwd = userPwd; 
    
        } 
    
        public Set<Phone> getPhones() { 
    
        	return phones; 
    
        } 
    
        public void setPhones(Set<Phone> phones) { 
    
        	this.phones = phones; 
    
        } 
    
        public Map<String, Phone> getMap() { 
    
        	return map; 
    
        } 
    
        public void setMap(Map<String, Phone> map) { 
    
        	this.map = map; 
    
        } 
    
    }
    

    Controller 方法:

    @RequestMapping("/dataTest7") 
    
    public void getParamsData7(User user){ 
    
        Set<Entry<String, Phone>> set=user.getMap().entrySet(); 
    
        for(Entry<String, Phone> entry:set){ 
    
        	System.out.println(entry.getKey()+"--"+entry.getValue().getNum()); 
    
        }  
    
    } 
    

    表单页面

    <form action="dataTest7.do" method="post"> 
    
        <input name="map['1'].num" value="123456" /> 
    
        <input name="map['2'].num" value="4576" /> 
    
        <input name="map['3'].num" value="4576" /> 
    
        <button type="submit"> 提交</button> 
    
    </form> 
    

    g).自定义复合类型

    user 实体 引用 Phone 实体

    public class User { 
    
        private int id; 
    
        private String userName; 
    
        private String userPwd; 
    
        private Phone phone; 
    
        public int getId() { 
    
        	return id; 
    
        } 
    
        public Phone getPhone() { 
    
        	return phone; 
    
        } 
    
        public void setPhone(Phone phone) { 
    
        	this.phone = phone; 
    
        } 
    
        public void setId(int id) { 
    
        	this.id = id; 
    
        } 
    
        public String getUserName() { 
    
        	return userName; 
    
        } 
    
        public void setUserName(String userName) { 
    
        	this.userName = userName; 
    
        } 
    
        public String getUserPwd() { 
    
        	return userPwd; 
    
        } 
    
        public void setUserPwd(String userPwd) { 
    
        	this.userPwd = userPwd; 
    
        } 
    }
    

    Controller 方法:

    @RequestMapping("/dataTest8") 
    
    public void getParamsData8(User user){ 
    
        System.out.println(user.getUserName()+"---"+user.getUserPwd()+"-"+user.getPhone().getNum()); 
    
    } 
    

    表单页面

    <form action="dataTest8.do" method="post"> 
    
        <input name="userName" value="123456" /> 
    
        <input name="userPwd" value="4576" /> 
    
        <input name="phone.num" value="4576" /> 
    
        <button type="submit"> 提交</button> 
    
    </form> 
    

    扩展~什么是数据校验?

    这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验。

    数据校验分为客户端校验和服务端校验

    客户端校验:js校验

    @RequestMapping("/dataTest8")

    public void getParamsData8(User user){

    System.out.println(user.getUserName()+"---"+user.getUserPwd()+"-"+user.getPhone().getNum()); 
    

    }

    
    
    
    表单页面 
    
    ~~~ java
    <form action="dataTest8.do" method="post"> 
    
        <input name="userName" value="123456" /> 
    
        <input name="userPwd" value="4576" /> 
    
        <input name="phone.num" value="4576" /> 
    
        <button type="submit"> 提交</button> 
    
    </form> 
    

    扩展~什么是数据校验?

    这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验。

    数据校验分为客户端校验和服务端校验

    客户端校验:js校验

    服务端校验:springmvc使用validation校验,struts2使用validation校验。都有自己的一套校验规则。

  • 相关阅读:
    ASP.NET MVC @helper使用说明
    asp.net批量发布博客到各大博客平台
    大型网站架构学习
    Js获取日期时间及其它操作
    Asp.net 后台添加Meta标签方法
    正则表达式排除特定字符串
    asp.net正则表达式过滤标签和数据提取
    <pages validateRequest="false"/>在.net4.0中无效的问题
    IE6、IE7、IE8中overflow:hidden无效问题
    如何在 Django 中保证并发的数据一致性
  • 原文地址:https://www.cnblogs.com/lezijie/p/13602696.html
Copyright © 2020-2023  润新知