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 ...
随机推荐
- Balking Pattern不需要就不用做
word自动保存功能,如果文档被修改了,后台线程每隔一段时间会自动执行保存功能,但是如果用户在自动保存之前用Ctrl+S手动保存呢?自动保存还会执行吗?答案是不会,因为这个操作时不需要重复做的. pu ...
- js添加节点
<!DOCTYPE html><html><body><script>var message=document.createTextNode(" ...
- 关于jquery ajax项目总结
$.ajax({ url:"../action/BorrowAction.php?action=oready", async:true,//异步请求 ...
- [JZOJ6341] 【NOIP2019模拟2019.9.4】C
题目 题目大意 给你一颗带点权的树,后面有许多个询问\((u,v)\),问: \[\sum_{i=0}^{k-1}dist(u,d_i) \ or \ a_{d_i}\] \(d\)为\(u\)到\( ...
- 【JZOJ5730】【luoguP2146】【Comet OJC0396】软件包管理器
description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖( ...
- 基于vue,通过父组件触发子组件的请求,等请求完毕以后,显示子组件,同时隐藏父组件
正常情况下,子组件应该尽量减少业务逻辑,而应该将业务逻辑放到父组件里面,从而减少耦合,但是当 我们不得不用到这种情况时,可以采用下面的思路 解决方案 尽量将请求单独作为一个函数(不要将请求放到show ...
- oracle将查询结果横转纵
SELECT '残疾人|民政|综合治理|计划生育|物业监管|安全生产|环境类|司法信访|党建|社会组织|文化体育|社保' D , '53|52|51|50|49|48|47|5|4|3|2|1' g ...
- git 大型灾难现场
由于某种原因,需要重建git仓库.因此删了所有分支,重建git仓库. 删除整个过程 删除所有分支(除master外) git branch -d {branch_name} # 删除本地分支 git ...
- service资源
service的作用:帮助外界用户访问k8s内的服务,并且提供负载均衡 创建一个service vim k8s_svc.yml apiVersion: v1 kind: Service metadat ...
- Java性能优化的50个细节,我必须分享给你!
来源:blog.csdn.net/dongnan591172113/article/details/51790428 ;i<list.size();i++) ,len=list.size();i ...