模型数据
1.数据放入request
- 说明:开发中,控制器/处理器中获取的数据如何放入request域,然后在前端(vue/jsp/...)取出显示?
先来看一个例子
应用实例需求:表单提交信息,后端获取信息,并通过request转发到另一个页面,显示信息。
需要知道的是:前端提交的数据,springmvc会自动地封装到java对象中,同时 springmvc 会自动地将其放入request 域中,这样我们就可以在跳转的下一个页面取出数据。
-
mode_date.jsp提交数据:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>model_data</title> </head> <body> <form action="vote/vote05" method="post"> 主人id:<input type="text" name="id"/><br/> 主人名:<input type="text" name="name"/><br/> 宠物id:<input type="text" name="pet.id"/><br/> 宠物名:<input type="text" name="pet.name"/><br/> <input type="submit" value="添加主人和宠物"/><br/> </form> </body> </html>
-
VoteHandler.java:
springmvc会自动将数据封装到Javabean中,并将获取的model模型放入到request域中。
package com.li.web.requestparam; import com.li.entity.Master; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @author 李 * @version 1.0 */ @RequestMapping(value = "/vote") @Controller public class VoteHandler { /** * 1.提交的数据->springmvc会自动地封装到 java对象 * ->同时 springmvc 会自动地将其放入request域中 * 2.这样就可以在跳转的下一个页面取出数据 */ @RequestMapping(value = "/vote05") public String test05(Master master) { //springmvc会自动的把获取的model模型放入request域中,名字就是 master return "vote_ok"; } }
-
转发的页面 vote_ok.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>vote_ok</title> </head> <body> <h1>取出request域中的信息</h1> 主人的id=${requestScope.master.id} 主人的名字=${requestScope.master.name} 宠物的id=${requestScope.master.pet.id} 宠物的名字=${requestScope.master.pet.name} </body> </html>
访问mode_date.jsp,提交数据:
转发页面vote_ok.jsp成功地拿到了request域中的信息:
从上述代码中可以看出springmvc会自动将获取的model数据添加到request域中。同时我们也可以手动添加修改数据,并放入到request域中,有如下三种方式:
1.1方式1-通过HttpServletRequest放入request域
-
这种方式就是原生的javaweb方式,可以在request域中以k-v形式,直接放入普通字符串,也可以放入对象
-
同时springmvc 自动放入request域的model也可以被修改
-
注意:springmvc放入request域中的对象的key值,是按照对象的类型(首字母小写)存放的,和方法的形参名无关
修改VoteHandler.java:
@RequestMapping(value = "/vote05")
public String test05(Master master100, HttpServletRequest request) {
//1.springmvc会自动的把获取的model模型放入request域中,名字就是 master
//2.也可以手动添加数据到request域中
request.setAttribute("address", "beijing");
//3.同时可以修改 master的属性值
master100.setName("hahahah");
//4.分析一下springmvc默认存放对象到request域中,属性名是如何确定的?
// 是按对象的类型(首字母小写)放入的,和方法的形参名无关
// 因此我们在转发的页面按照该名称是可以拿出来的
return "vote_ok";
}
mode_date.jsp不变,vote_ok.jsp添加address获取。
提交数据:
转发页面获取的数据:
1.2方式2-通过请求的方法参数Map<String,Object>放入request域
springmvc会遍历map,将map中的k-v存放到request域中。因此你会发现在转发页面中,直接通过${requestScope.key}也可以获取属性的数据。
修改VoteHandler.java:
/**
* 演示通过Map<String,Object>设置数据到request域
*/
@RequestMapping(value = "/vot