08_springmvc数据回显和@ModelAttribute注解详解
一.数据回显
提交后,如果出现错误,将刚才提交的数据回显到刚才的提交页面。
二.pojo数据回显方法
1.springmvc默认对pojo数据进行回显。
pojo数据传入controller方法后,springmvc自动将pojo数据放到request域,key等于pojo类型(首字母小写),使用@ModelAttribute指定pojo回显到页面在request中的key。
2.@ModelAttribute还可以将方法的返回值传到页面
页面上可以得到itemTypes数据。
3、最简单方法使用model,可以不用@ModelAttribute
简单类型数据回显
使用最简单方法使用model。
model.addAttribute("id", id);
@ModelAttribute使用详解:
org.springframework.web.bind.annotation.ModelAttribute注解类型将请求参数绑定到Model对象。
@ModelAttribute注解只支持一个属性value,类型为String,表示绑定的属性名称。
提示:被@ModelAttribute注释的方法会在Controller每个方法执行前被执行,因此在一个Controller映射到多个URL时,要谨慎使用。
1.@ModelAttribute(value="")注释返回具体类的方法
index.jsp
用于展示调用关于@ModelAttribute注解不同的使用方法。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<h3>测试@ModelAttribute</h3>
<a href="loginForm1">测试@ModelAttribute(value="")注释返回具体类的方法</a>
<a href="loginForm2">测试@ModelAttribute注释void返回值的方法</a>
<a href="loginForm3">测试@ModelAttribute注释返回具体类的方法</a>
<a href="loginForm4">测试@ModelAttribute和@RequestMapping同时注释一个方法</a>
<a href="loginForm5">测试@ModelAttribute注释一个方法的参数</a>
</body>
</html>
FormController
用于接受index.jsp页,a标签(超链接)传递的地址。
@Controller
public class FormController {
@RequestMapping(value = "/{formName}")
public String loginForm(@PathVariable String formName){
return formName;
}
}
loginForm1.jsp
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>测试@ModelAttribute(value="")注释返回具体类的方法 </h3>
<form action="login111" method="post">
<label for="loginName">登录名:</label><input type="text" id="loginName" name="loginName">
<input type="submit">
</form>
</body>
</html>
测试@ModelAttribute(value="")注释返回具体类的方法
使用@ModelAttribute注释的value属性,来指定model属性的名称,model属性的值就是方法的返回值
@Controller
public class ModelAttribute1Controller {
//使用@ModelAttribute注释的value属性,来指定model属性的名称,model属性的值就是方法的返回值
@ModelAttribute("loginName")
public String userModel1(
@RequestParam("loginName") String loginName){
return loginName;
}
@RequestMapping(value = "/login111")
public String login111(){
return "result1";
}
result1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${requestScope.loginName}
</body>
</html>
测试@ModelAttribute注释void返回值的方法
loginForm2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>测试@ModelAttribute注释void返回值的方法</h3>
<form action="login222" method="post">
<label for="loginName">登录名:</label><input type="text" id="loginName" name="loginName">
<label for="password">密码:</label><input type="password" id="password" name="password">
<input type="submit" value="登录">
</form>
</body>
</html
@Controller
public class ModelAttribute2Controller {
//model属性名称和值由model.addAttribute()实现,前提是要在方法中加入图个Model类型的参数
@ModelAttribute
public void userModel2(
@RequestParam("loginName") String loginName,
@RequestParam("password") String password,
Model model) {
model.addAttribute("loginName", loginName);
model.addAttribute("password", password);
}
@RequestMapping(value = "/login222")
public String login222(){
return "result2";
}
}
result2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${requestScope.loginName}
${requestScope.password}
</body>
</html>
测试@ModelAttribute注释访问具体类的方法
loginForm3.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>测试@ModelAttribute注释返回具体类的方法</h3>
<form action="login333" method="post">
<label for="loginName">登录名:</label><input type="text" id="loginName" name="loginName">
<label for="password">密码:</label><input type="password" id="password" name="password">
<input type="submit" value="登录">
</form>
</body>
</html>
</body>
</html>
@Controller
public class ModelAttribute3Controller {
//静态List<User>集合,此处代替数据库用来保存注册的用户信息
private static List<User> userList;
//此构造器,初始化List<User>集合
public ModelAttribute3Controller() {
super();
userList = new ArrayList<>();
User user1 = new User("test", "123");
User user2 = new User("admin", "456");
userList.add(user1);
userList.add(user2);
}
//根据登录名和密码查询用户,用户存在返回用户信息的User对象,不存在返回null
private User find(String loginName, String password) {
for (User user : userList) {
if (user.getName().equals(loginName) && user.getPwd().equals(password)) {
return user;
}
}
return null;
}
//model属性的名称没有被锁定,它由返回类型隐含表示,如这个方法返回User类型,
//那么这个model属性的名称就是user
@ModelAttribute
public User userModel3(
@RequestParam("loginName") String loginName,
@RequestParam("password") String password) {
return find(loginName, password);
}
@RequestMapping(value = "/login333")
public String login333() {
return "result3";
}
}
result3.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${requestScope.user.name}
</body>
</html>
测试@ModelAttribute和@RequestMapping同时注释一个方法
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<body>
<h3>测试@ModelAttribute注释void返回值的方法</h3>
<form action="login444" method="post">
<label for="loginName">登录名:</label><input type="text" id="loginName" name="loginName">
<label for="password">密码:</label><input type="password" id="password" name="password">
<input type="submit" value="登录">
</form>
</body>
</body>
</html>
@Controller
public class ModelAttribute4Controller {
/**
* 视图名称是@RequestMapping的value值——"/login444",即跳转结果
*
* @return model属性名称就是value的值
*/
@RequestMapping(value = "/login444")
@ModelAttribute(value = "username")
public String login444() {
return "admin";
}
}
login444.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${requestScope.username}
</body>
</html>
测试@ModelAttribute注释一个方法的参数
loginForm5.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<body>
<h3>测试@ModelAttribute注释一个方法的参数</h3>
<form action="login555" method="post">
<label for="loginName">登录名:</label><input type="text" id="loginName" name="loginName">
<label for="password">密码:</label><input type="password" id="password" name="password">
<input type="submit" value="登录">
</form>
</body>
</body>
</html>
@Controller
public class ModelAttribute5Controller {
//model的属性名称就是value的值,即"user",model属性对象就是方法的返回值
@ModelAttribute("user")
public User userModel5(
@RequestParam("loginName") String loginName,
@RequestParam("password") String password){
User user =new User();
user.setName(loginName);
user.setPwd(password);
return user;
}
@RequestMapping(value = "/login555")
public String login555(@ModelAttribute("user") User user){
user.setName("管理员");
return "result5";
}
}
result5.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${requestScope.user.name}
</body>
</html>
08_springmvc数据回显和@ModelAttribute注解详解的更多相关文章
- @ModelAttribute注解详解
@ModelAttribute注解详解 1.@ModelAttribute定义: 被该注解定义的方法,会在该方法所在的controller的任何目标方法执行之前执行 2.@ModelAttribute ...
- SpringMVC5中,@ModelAttribute注解详解
看这个注解的前提最好熟悉一下SpringMVC的model组件,该注解可以有五种使用方式: ①②③为 @ModelAttribute 跟@RequestMapping 分开修饰方法,被@ModelAt ...
- SpringMVC第五篇【方法返回值、数据回显、idea下配置虚拟目录、文件上传】
Controller方法返回值 Controller方法的返回值其实就几种类型,我们来总结一下-. void String ModelAndView redirect重定向 forward转发 数据回 ...
- SpringMVC【参数绑定、数据回显、文件上传】
前言 本文主要讲解的知识点如下: 参数绑定 数据回显 文件上传 参数绑定 我们在Controller使用方法参数接收值,就是把web端的值给接收到Controller中处理,这个过程就叫做参数绑定.. ...
- SpringMVC学习(四)———— 数据回显与自定义异常处理器
一.数据回显技术 Springmvc默认支持对pojo类型的数据回显,默认不支持简单类型的数据回显 1.1.什么是数据回显? 在信息校验时,如果发生校验错误,那么把校验的数据信息,依然停留在当前页面, ...
- springmvc(五) 数据回显与自定义异常处理器
这章讲解一下springmvc的数据回显和自定义异常处理器的使用,两个都很简单 --WH 一.数据回显技术 Springmvc默认支持对pojo类型的数据回显,默认不支持简单类型的数据回显 1.1.什 ...
- springMVC参数绑定与数据回显
简单例子:修改商品信息的jsp页面: 参数绑定过程: 1.2.1 默认支持的参数类型 处理器形参中添加如下类型的参数处理适配器会默认识别并进行赋值. 1.1.1 HttpServletReq ...
- validate参数校验和数据回显
服务端校验 校验理解 项目中,通常使用较多的是前段的校验,比如在页面中js校验.对于安全要求较高的建议在服务端进行校验. 服务端校验: 控制层controller:校验页面请求的参数的合法性.在服务端 ...
- SpringMVC学习--数据回显
简介 表单提交失败需要再回到表单页面重新填写,原来提交的数据需要重新在页面上显示. 简单数据类型 对于简单数据类型,如:Integer.String.Float等使用Model将传入的参数再放到req ...
随机推荐
- iOS开发系列-LLVM、Clang
LLVM LLVM计划启动于2000年,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持开展. 我们可以认为LLVM是一个完整 ...
- 在Spring-boot中,为@Value注解添加从数据库读取properties支持
一般我们会把常用的属性放在工程的classpath文件夹中,以property,yaml或json的格式进行文件存储,便于Spring-boot在初始化时获取. @Value则是Spring一个非常有 ...
- linxu(centos)安装php-fpm
编译安装php-fpm 安装前准备 yum -y install gcc automake autoconf libtool make yum -y install gcc gcc-c++ glibc ...
- 尚学python课程---14、python中级语法
尚学python课程---14.python中级语法 一.总结 一句话总结: var[1:5] 访问模式:比如字符串,比如列表元祖,字典等 del 删除模式:比如列表.元祖.字典 1.Python的N ...
- day21-time与random等常用模块与包
2018-08-05 # ********************day21-time与random等常用模块与包 ******************* # 参考资料# python模块(转自Yua ...
- DEVO 7E遥控器配对
先把遥控器上电,并把模型里面的固定ID关闭,放在一旁. 接收器断电,按住CLEAN按钮后上电,会发现接收器慢闪两下后松开. 这时遥控器应该就连上接收器了,这时接收器常亮. 再自行配置固定ID即可.
- CCPC 2019 网络赛 1006 Shuffle Card
// 签到题,比赛时候写双向链表debug了半天,发现有更好方法,记录一下. Shuffle Card HDU 6707 题意: 有一 \(n\) 张卡片,编号 \(1~n\) ,给定初始编号 ...
- java读写属性配置文件
package readproperties; import java.io.FileInputStream; import java.io.IOException; import java.io.I ...
- 1.2_springboot2.x中redis缓存&原理介绍
1.整合redis作为缓存 说明这里springboot版本2.19 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构 ...
- 第二天:数值与字符串、列表list
数值 1. 声明变量 age = 20 f = 3.14 #浮点型 f = 0.3 f = .3 2.表达式 主要是做一些简单的加减乘除运算,直接出结果 1.1 + 2.2 2.2 + 3.0 3.1 ...