springmvc与前端数据交互实例

springmvc与前端数据交互实例

 

Q:为什么使用逻辑视图

A:将控制器中请求处理的逻辑和视图中的渲染实现解耦合是springmvc的一大特征。

 

控制器方法都是没有直接产生浏览器中渲染所需的HTML。这些方法只是将一些数据填充到模型中,然后通过模型传递给一个用来渲染的视图(逻辑视图),然后将逻辑视图名字以及local对象传入视图解析器中,返回一个view对象(view接口接收模型以及servlet中的request以及response),然后将渲染结果放置在response中。

适用于逻辑解释器 就是加前缀以及后缀来确定jsp的实际位置。

可以自定义对象,然后让对象携带数据 传送到jsp中 数据一般藏在modelview  modelmap session。

一、从页面接收参数

Spring MVC接收请求提交的参数值的几种方法:

 

  • 使用HttpServletRequest获取。
     @RequestMapping("/login.do")  
    public String login(HttpServletRequest request){  
        String name = request.getParameter("name")  
        String pass = request.getParameter("pass")  
    } 

  表单的信息都会存储在request请求体中,当使用httpservletrequest时候 可以获取request,然后根据名称获取相对应的元素。

  

 

  • 使用@RequestParam注解。

     

        @RequestMapping("/login.do")  
        public String login(HttpServletRequest request,  
                                        String name,  
         @RequestParam("pass")String password) // 表单属性是pass,用变量password接收  
        {  
           syso(name);  
           syso(password)  
        }  

    使用注解@requestparam来获取表单元素

     

    •  

  • 使用自动机制封装成实体参数。

     

 

    <form action="login.do">  
    用户名:<input name="name"/>  
    密码:<input name="pass"/>  
    <input type="submit" value="登陆">  
    </form>  
      
    //封装的User类  
    public class User{  
      private String name;  
      private String pass;  
    }  

 

 

    @RequestMapping("/login.do")  
    public String login(User user)  
    {  
       syso(user.getName());  
       syso(user.getPass());  
    }  

 

应该要求表单属性与类属性一致才可以对应。然后将表单元素

 

 二、向页面传值

当Controller组件处理后,需要向响应JSP传值时,可以使用的方法:

 

1),使用HttpServletRequest 和 Session  然后setAttribute(),就和Servlet中一样

 

Model数据会利用HttpServletRequest的Attribute传值到success.jsp中

 

    @RequestMapping("/login.do")  
    public ModelAndView  login(String name,String pass){  
        User user = userService.login(name,pwd);  
        Map<String,Object> data = new HashMap<String,Object>();  
        data.put("user",user);  
        return new ModelAndView("success",data);  
    }  

 

 

 

2),使用ModelAndView对象

 

 

3),使用ModelMap对象

 

使用ModelMap参数对象示例:

ModelMap数据会利用HttpServletRequest的Attribute传值到success.jsp中

 

    @RequestMapping("/login.do")  
    public String login(String name,String pass ,ModelMap model){  
        User user  = userService.login(name,pwd);  
        model.addAttribute("user",user);  
        model.put("name",name);  
        return "success";  
    }  

 

 

 

4),使用@ModelAttribute注解

使用@ModelAttribute示例

在Controller方法的参数部分或Bean属性方法上使用

@ModelAttribute数据会利用HttpServletRequest的Attribute传值到success.jsp中

 

 

    @RequestMapping("/login.do")  
    public String login(@ModelAttribute("user") User user){  
        //TODO  
       return "success";  
    }  
      
    @ModelAttribute("name")  
    public String getName(){  
        return name;  
    }  

 

 

 

5)Session存储:可以利用HttpServletReequest的getSession()方法

 

 

    @RequestMapping("/login.do")  
    public String login(String name,String pwd  
                                ModelMap model,HttpServletRequest request){  
         User user = serService.login(name,pwd);  
         HttpSession session = request.getSession();  
         session.setAttribute("user",user);  
         model.addAttribute("user",user);  
         return "success";  
    }  

 

 

 

6)自定义Map

 

 

@ResponseBody
    @RequestMapping(value = "/updatestatus", method = RequestMethod.POST)
    public Map<String, Object> updateStatus(HttpServletRequest request) {
        Map<String, Object> result = new HashMap<String, Object>();
        String id = request.getParameter("id");
        SystemAdministrator sysadmin=systemAdminBiz.get(Integer.valueOf(id));
        sysadmin.setStatus(1);
        boolean    flag = systemAdminBiz.update(sysadmin);
        result.put("status", flag);
        return result;
    }

 

@RequestMapping(value = "/list", method = {RequestMethod.POST,RequestMethod.GET})
    public String queryAdministrator(HttpServletRequest request,ModelMap model) {
        Integer roleId = request.getParameter("roleListById") == null ? 0 : Integer.parseInt(request.getParameter("roleListById"));
        Map<String, Object> properties = new HashMap<String, Object>();
        if(roleId.intValue() > 0) {
            properties.put("role:=", roleId);
            model.put("roleId", roleId);
        }
        List<SystemAdministrator> administrator = systemAdminBiz.find(properties);
        List<SystemRole> systemRole = systemRoleBiz.getAll();
        model.put("administratorList", administrator);
        model.put("roleList", systemRole);
        return "sys_admin_list";
    }

 

 

 

 

 7)Spring MVC 默认采用的是转发来定位视图,如果要使用重定向,可以如下操作

 

1,使用RedirectView

2,使用redirect:前缀

 

    public ModelAndView login(){  
       RedirectView view = new RedirectView("regirst.do");  
       return new ModelAndView(view);  
    }  

 

 

 或者用如下方法,工作中常用的方法: 

 public String login(){  
    //TODO  
    return "redirect:regirst.do";  
} 

 

 

 

Spring MVC 从页面向Controller传递参数的方式

Spring MVC从页面向Controller传值的方式

 

    验证代码:https://files.cnblogs.com/files/peiyangjun/20180104_springMVC_easyui.zip 

    从页面向Controller 传值的方式有很多,本文整理出常用的从页面向Controller传值的几种方式:

 1、通过HttpServletRequest 向后台传递数据

     页面程序如下:

 

    <h2>利用HttpServletRequest传数据</h2>
    <form action="loginToJson">
        用户名:<input name="name" /> 密码:<input name="pass" /> <input
            type="submit" value="登陆">
    </form>

    后台程序段如下:

  

    @ResponseBody

    @RequestMapping(value="/loginToJson",method=RequestMethod.POST)

    public String loginToJson(HttpServletRequest request) {

       User user = new User();

       user.setUserName(request.getParameter("name"));

       user.setPassword(request.getParameter("pass"));

       return JSON.toJSONString(user);

    }

使用HttpServletRequest根据属性名字来获取表单信息

2、通过参数向Controller传递值

  前台程序如下:

 

    <h2>利用函数参数传数据</h2>

    <form action="loginByVariable" method="post">

         用户名:<input name="name" /> 密码:<input name="pass" />

         <input type="submit" value="登陆">

    </form>

 

  后台程序如下:

 

   @RequestMapping(value="/loginByVariable",method=RequestMethod.POST)

     public String loginToSession(HttpServletRequest request,ModelMap map,String name,String pass) {

          User user = new User();

          user.setUserName(name);

          user.setPassword(pass);

          map.put("user", user);

          System.out.println(user);

          return "mySession";

     }

 

        注意:前台<input name="name" />中的name属性的值,必须和后台函数参数中的String name中的形参名一致,否则从后台取不到值。

将表单的元素作为参数传入

3、利用函数参数,对象传递值到Controller

    前置条件,对象的定义代码:

    注意这里,User对象的属性名为userName和password,并有getter和setter属性

 

 

     public class User{
    
    @Override
    public String toString() {
        return "User [userName=" + userName + ", password=" + password + "]";
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    private String userName;
    private String password;
}

 

 

    前台程序如下:

    注意:userNamepassword必须和对象属性名称一致。

 

     <h2>利用函数参数对象传数据</h2>

     <form action="loginByObject" method="post">

          用户名:<input name="userName" /> 密码:<input name="password" /> <input

               type="submit" value="登陆">

</form>

 

    后台程序如下:

 

      @RequestMapping(value="/loginByObject",method=RequestMethod.POST)

      public String loginToSession(ModelMap map,User user) {

            User user1 = new User();

            user1.setUserName(user.getUserName());

            user1.setPassword(user.getPassword());

            System.out.println(user1+" Object");

            map.put("user", user1);

            return "mySession";

      }

 

将表单属性信息存入已经设定好的模型中,模型的属性与表单的属性是一致的。并且模型中必须设有set get方法。

 

4、利用函数参数@RequestParam参数传递据

       前台代码如下:

 

     <br>

     <h2>利用函数参数@RequestParam参数传递据</h2>

     <form action="loginByRequestParm" method="post">

          用户名:<input name="name" /> 密码:<input name="pass" /> <input

               type="submit" value="登陆">

     </form>

 

           后台程序如下:       

 

 @RequestMapping(value="/loginByRequestParm",method=RequestMethod.POST)

         public String loginToSessiona(HttpServletRequest request,ModelMap map,

               @RequestParam("name") String UserName,@RequestParam String pass) {

          User user = new User();

          user.setUserName(UserName);

          user.setPassword(pass);

          map.put("user", user);

          System.out.println(user+"requestParam");

          return "mySession";

     }

 

注意:@RequestParam("name")中如果有参数,name必须为页面中属性的值,如果没有参数,则参数名,必须和页面中属性的值相同,如页面中pass,则在@RequestParam中,则可以不指定参数,但形参的名字必须为pass

5、   通过URL传递参数  @PathVariable

           具体代码如下:   

 

@Controller  
public class TestController {  
     @RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET)  
     public String getLogin(@PathVariable("userId") String userId,  
         @PathVariable("roleId") String roleId){  
         System.out.println("User Id : " + userId);  
         System.out.println("Role Id : " + roleId);  
         return "hello";  
     }  
     @RequestMapping(value="/product/{productId}",method = RequestMethod.GET)  
     public String getProduct(@PathVariable("productId") String productId){  
           System.out.println("Product Id : " + productId);  
           return "hello";  
     }  
     @RequestMapping(value="/javabeat/{regexp1:[a-z-]+}",  
           method = RequestMethod.GET)  
     public String getRegExp(@PathVariable("regexp1") String regexp1){  
           System.out.println("URI Part 1 : " + regexp1);  
           return "hello";  
     }  
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值