springMVC中参数传值,作用域传值

简单的记录一下mvc中参数传值,和作用域传值

1.简单数据类型传值
传递的参数与实体类的name值一致
直接使用实体类对象获得值

public class User {
    private int id;
    private String name ;
    private String pwd;
    private int age;
    }
"loginOne.do" method="post"> type="text" name="name" > type="password" name="pwd" > type="text" name="age" > type="submit" value="Login" >

如上所示我们可以用一个实体来获取参数值,这里是注解开发,记住在类名上加入注解@Controller

 @RequestMapping("login.do")
        public String  login(User user){

                int age = user.getAge();
                String name = user.getName();
                String pwd = user.getPwd();
                System.out.println(user);

            return null;
     }

注意的是在传递过程中有可能出现乱码问题,要设置字符集编码,我呢配置了一个过滤器,一劳永逸


    <filter>
        <filter-name>filterfilter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
        <init-param>
            <param-name>encodingparam-name>
            <param-value>utf-8param-value>
        init-param>
    filter>

    <filter-mapping>
        <filter-name>filterfilter-name>
        <url-pattern>/*url-pattern>
    filter-mapping>

2.传递的参数与实体属性名不一致的时候使用的是@RequestParam注解
有三个属性value:前台页面name属性的值
required:是否必须有参数,默认为true
defaultValue:默认的值是什么
代码:

@RequestMapping("loginOne.do")
    public String loginOne(
        @RequestParam(value="tname",required=true)  String name,
        @RequestParam(value="tpwd",defaultValue="6666",required=true) String pwd,
        @RequestParam(value="tage",required=true) int age

        ){

    System.out.println(name+"\t"+pwd+"\t"+age);
            return "login";
}

前台页面是、:

"loginOne.do" method="post"> type="text" name="tname" > type="password" name="tpwd" > type="text" name="tage" > type="submit" value="Login" >

3.数组传值
实体类有一个数组属性例如:

public class User {
    private int id;
    private String name ;
    private String pwd;
    private int age;
    private String[] books;
    }

使用get方法获取值

@RequestMapping("loginOne.do")
    public String loginOne(User user){

    System.out.println(user.getBooks());
                return "login";

    }

jsp页面

"loginOne.do" method="post"> type="text" name="name" > type="password" name="pwd" > type="text" name="age" > type="text" name="adress.name" > type="checkbox" name="books" value="C#"> C# type="checkbox" name="books" value="PS"> PS type="checkbox" name="books" value="JAVA">JAVA type="checkbox" name="books" value="PHP">PHP type="submit" value="Login" >

4.对象传值
一个类中包含另一个类的属性,我们可以通过方法调用来实现
jsp页面还是上面的jsp,可以看到有一个 name-“adress.name”这样起名字可以直接找到实体的get方法来获取值,在我们开发的时候,起名字是很重要的,名字起对了,我们可以省很多事

    @RequestMapping("loginOne.do")
    public String loginOne(User user){

        System.out.println(user.getAdress());
                return "login";

    }

好的,下面我们说一下作用域传值
1.使用Servlet 四大作用域PageContext,ServletRequest,HttpSession,ServletContext;都可以使用我只示范一个,和我们之前使用的servlet差不多,都是用request获取值,比较返回

/**
     * 使用request作用域传值
     * @param req
     * @param resp
     * @return
     */
    @RequestMapping("login")
    public String req(HttpServletRequest req,HttpServletResponse resp){
        String name = req.getParameter("name");
        String pwd = req.getParameter("pwd");
        System.out.println(name);
        System.out.println(pwd);
        if("admin".equals(name)){
            req.setAttribute("name", name);
            return "listAdmin";
        }else{
            return "false";
        }
    }

2.使用model对象

/**
     * 利用Model对象作用域传值
     * 使用model.addAttribute("name",name);
     * @param user
     * @param model
     * @return
     */

    @RequestMapping("model")
    public String toModel(User user,Model model){
            String name = user.getName();
            String pwd = user.getPwd();
        if("admin".equals(name)){
            model.addAttribute("name",name);
            return "listAdmin";
        }else{
            return "false";
        }
    } 

3.使用ModelAndView对象

/**
     * 使用ModelAndView对象传值
     * @param user
     * @return
     */
    @RequestMapping("mandv")
    public ModelAndView mlv(User user){
        ModelAndView mv=new ModelAndView();
        String name = user.getName();
        String pwd = user.getPwd();
        if("admin".equals(name)){
            mv.setViewName("listAdmin");
            mv.addObject("name",name);

        }else{
            mv.setViewName("false");
        }

        return mv;
    }

4.使用Map传值

/**
     * 使用Map传值
     * @param user
     * @return
     */
    @RequestMapping("Map")
    public String toMap(User user,Map map,HttpServletRequest req){

        String name = user.getName();
        map.put("name", name);

        if(name!=null){
            req.setAttribute("map", map);
            return "listAdmin" ;
        }else{
            return "false" ;
        }
    }

你可能感兴趣的:(springmvc)