SpringMVC框架——视图解析

SpringMVC视图解析,就是将业务数据绑定给JSP域对象,并在客户端进行显示。

域对象:

  pageContext、request、session、application

业务数据绑定是有ViewResolver 完成的;

SpringMVC提供了一下几种方式绑定业务数据:

  1、Map

  2、Model

  3、ModelAndView

  4、@sessionAttribute

  5、@ModelAttribute

  • 业务数据绑定到request域对象

    Map

  SpringMVC在内部使用Model接口存储业务数据,在调用业务方法之前会创建一个隐含对象作为业务数据的存储容器。设置业务方法的入参为Map类型,SpringMVC会将隐含对象的引用传递给入参。

  开发者可以对模型中所有数据进行管理,包括访问和添加、修改、删除。

  开发者只需要在业务方法处添加Map类型的入参,方法体中便可以通过对入参的操作来完成业务数据的添加。

访问http://localhost:7777/view/map

    

    Model

  与Map类似,业务方法通过入参来完成业务数据的绑定。

  访问http://localhost:7777/view/model

         

    HTTPServletRequest

  访问http://localhost:7777/view/request

    

     ModelAndView

  MapModel 不同的是, ModelAndView 不但包含了业务数据,同时也包含了视图信息,将视图和业务数据进行了整合,封装成一个对象,如果使用 ModelAndView 来处理业务数据,业务方法的返回值必须是 ModelAndView 对象。
  业务方法中对 ModelAndView 进行两个操作:
    1、填充业务数据
    2、绑定视图信息

  访问http://localhost:7777/view/modelAndView

        

   访问http://localhost:7777/view/modelAndView2

   

代码如下:

  entity

package com.sunjian.entity;

/**
 * @author sunjian
 * @date 2020/3/17 14:25
 */
public class User {
    private Integer id;
    private String name;
    private Integer age;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age + '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

}

  controller

package com.sunjian.controller;

import com.sunjian.entity.Address;
import com.sunjian.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.view.InternalResourceView;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * @author sunjian
 * @date 2020/3/17 19:17
 */
@Controller
@RequestMapping("/view")
public class ViewController {
    @RequestMapping("/map")
    public String mapTest(Map<String, User> map){
        User user = new User();
        user.setId(7);
        user.setName("cronaldo");
        user.setAge(35);
        map.put("user", user);
        return "show";
    }

    @RequestMapping("/model")
    public String modelTest(Model model){
        User user = new User();
        user.setId(10);
        user.setName("meisi");
        user.setAge(33);
        model.addAttribute("user", user);
        return "show";
    }

    @RequestMapping("/request")
    public String request(HttpServletRequest request){
        User user = new User();
        user.setId(8);
        user.setName("kaka");
        user.setAge(39);
        request.setAttribute("user", user);
        return "show";
    }

    @RequestMapping("/modelAndView")
    public ModelAndView modelAndView(){
        User user = new User();
        user.setId(77);
        user.setName("buFeng");
        user.setAge(41);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", user);
        modelAndView.setViewName("show");
        return modelAndView;
    }

    @RequestMapping("/modelAndView2")
    public ModelAndView modelAndView2(){
        User user = new User();
        user.setId(77);
        user.setName("buFeng");
        user.setAge(41);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user", user);
        View view = new InternalResourceView("/show.jsp");
        modelAndView.setView(view);
        return modelAndView;
    }
}

  jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${user}
</body>
</html>

  

    

猜你喜欢

转载自www.cnblogs.com/zuichao123/p/12512915.html