一.数据回显

提交后,如果出现错误,将刚才提交的数据回显到刚才的提交页面。

二.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注解详解的更多相关文章

  1. @ModelAttribute注解详解

    @ModelAttribute注解详解 1.@ModelAttribute定义: 被该注解定义的方法,会在该方法所在的controller的任何目标方法执行之前执行 2.@ModelAttribute ...

  2. SpringMVC5中,@ModelAttribute注解详解

    看这个注解的前提最好熟悉一下SpringMVC的model组件,该注解可以有五种使用方式: ①②③为 @ModelAttribute 跟@RequestMapping 分开修饰方法,被@ModelAt ...

  3. SpringMVC第五篇【方法返回值、数据回显、idea下配置虚拟目录、文件上传】

    Controller方法返回值 Controller方法的返回值其实就几种类型,我们来总结一下-. void String ModelAndView redirect重定向 forward转发 数据回 ...

  4. SpringMVC【参数绑定、数据回显、文件上传】

    前言 本文主要讲解的知识点如下: 参数绑定 数据回显 文件上传 参数绑定 我们在Controller使用方法参数接收值,就是把web端的值给接收到Controller中处理,这个过程就叫做参数绑定.. ...

  5. SpringMVC学习(四)———— 数据回显与自定义异常处理器

    一.数据回显技术 Springmvc默认支持对pojo类型的数据回显,默认不支持简单类型的数据回显 1.1.什么是数据回显? 在信息校验时,如果发生校验错误,那么把校验的数据信息,依然停留在当前页面, ...

  6. springmvc(五) 数据回显与自定义异常处理器

    这章讲解一下springmvc的数据回显和自定义异常处理器的使用,两个都很简单 --WH 一.数据回显技术 Springmvc默认支持对pojo类型的数据回显,默认不支持简单类型的数据回显 1.1.什 ...

  7. springMVC参数绑定与数据回显

    简单例子:修改商品信息的jsp页面: 参数绑定过程: 1.2.1  默认支持的参数类型 处理器形参中添加如下类型的参数处理适配器会默认识别并进行赋值. 1.1.1     HttpServletReq ...

  8. validate参数校验和数据回显

    服务端校验 校验理解 项目中,通常使用较多的是前段的校验,比如在页面中js校验.对于安全要求较高的建议在服务端进行校验. 服务端校验: 控制层controller:校验页面请求的参数的合法性.在服务端 ...

  9. SpringMVC学习--数据回显

    简介 表单提交失败需要再回到表单页面重新填写,原来提交的数据需要重新在页面上显示. 简单数据类型 对于简单数据类型,如:Integer.String.Float等使用Model将传入的参数再放到req ...

随机推荐

  1. navicat远程连接报1045 access denied for user'root'@'ip'(using pasword:yes".............

    这个其实很简单,授权就行了.如下 1.GRANT ALL PRIVILEGES ON *.* TO'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;2 ...

  2. 02->交互式图形学--用glut库实现Sierpinski镂垫

    Sierpinski图形是一类有趣的图形,本文结合交互式图形学教材,讲解Sierpinski镂垫图形生成,作为入门图形学编程的第一课.为了简便,本文就2D来进行讨论.实验环境见01 算法 主要是根据随 ...

  3. PokerNet-poker recognition: 扑克识别 (6)

    文章目录 准备 最终结果 未来改进 准备 机器: Titan XP 12GB, 64GB RAM, 机器非常强,可靠. 下次有机会购买RTX 2080 Ti 试试 最终结果 错误率可以达到万分之一,非 ...

  4. 让er studio 生成带说明的sql

    一直使用er studion 来建数据库的模型图. 用了几年苦于 erstudion 不能生成带说明注释的sql 语句,每次生成实体之后都要自己去加注释. 今天根据外国朋友的资料找到了办法 需要自己建 ...

  5. delphi 还原窗口

    1.格局还原procedure TFrmStyleProp.btnNewClick(Sender: TObject); //声明var iniFile : TIniFile; idx : intege ...

  6. Java学习 时间类 Period类与Duration类 / LocalDate类与Instant类 用法详解

    前言 java 8 中引入的两个与日期相关的新类:Period 和 Duration.两个类看表示时间量或两个日期之间的差,两者之间的差异为:Period基于日期值,而Duration基于时间值.他们 ...

  7. [JZOJ3691] 【CF414E】Mashmokh's Designed tree

    题目 题目大意 给你一棵树,接下来对这棵树进行三种操作: 1.询问两点之间的距离. 2.让某个点变为它原来的第\(h\)个祖先的最后一个儿子. 3.求\(dfs\)序中最后一个深度为\(k\)的点. ...

  8. ibator配置文件说明文档

    1. <classPathEntry>  属性名 说明 示例 location 数据库驱动文件路径 lib/mysql-connector-java-5.1.6-bin.jar   2.  ...

  9. 模式识别原理(Pattern Recognition)、概念、系统、特征选择和特征

    §1.1 模式识别的基本概念 一.广义定义 1.模式:一个客观事物的描述,一个可用来仿效的完善的例子. 2.模式识别:按哲学的定义是一个“外部信息到达感觉器官,并被转换成有意义的感觉经验”的过程. 例 ...

  10. php算法题---对称的二叉树

    php算法题---对称的二叉树 一.总结 一句话总结: 可以在isSymmetrical()的基础上再加一个函数comRoot,函数comRoot来做树的递归判断 /*思路:首先根节点以及其左右子树, ...