SpringMVC - @ModelAttribute
Posted Vodka~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC - @ModelAttribute相关的知识,希望对你有一定的参考价值。
package com.vodka.Controller;
import com.vodka.Entity.UserInfo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @author Vodka
* @date 2022/03//13:26
*/
@Controller
public class ModelController
/*
* 因为模型对象要先于 controller 方法之前创建,
* 所以被 @ModelAttribute 注解的方法会在 Controller 每个方法执行之前都执行,
* 因此一个 Controller 映射多个 URL 时,结合具体情况使用
* */
//应用于方法无返回值时
@ModelAttribute
public void MyModel(@RequestParam(required = false)String node, Model model)
model.addAttribute("Nodes",node);
/*
* 应用在有返回值的方法上,
* 返回值对象 NodeName 会被默认放到隐含的 Model 中,
* 默认在 Model 中 key 为返回值类型首字母小写,value 为返回的值,
* 等同于 model.addAttribute("string", NodeName),可在前台直接使用 $string,但这样的情况应尽量避免
* 可自行定义在Model中的 key,如 :
* return MyNode;
* 等同于:
* model.addAttribute("NodeName",MyNode);
* */
@ModelAttribute("NodeName")
public String StringModel(@RequestParam(required = false)String MyNode ,Model model)
return MyNode;
/*
* Spring MVC 会先执行 标记 @ModelAttribute 注解的方法,将相应参数的值存入到 Model模型中,
* 然后执行 TestModel 方法,这样相应的参数值就被带到了 TestModel 方法中。
*
* */
@RequestMapping(value = "/TestModel")
public String TestModel()
return "ModelTest";
/*
* @ModelAttribute 注解在方法的参数上,调用方法时,模型的值会被注入,
* 这在实际使用时非常简单,常用于将表单属性映射到模型对象。
*
*
* 1. 以“UInfo”为键值存储在 Model 对象中,和“model.addAttribute("UInfo",userInfo)”语句的功能一样,
* 2. 如果没有指定键值,即“@ModelAttribute UserInfo userInfo”,
* 那么在创建 UserInfo 实例时以“userInfo”为键值存储在 Model 对象中,
* 和“model.addAttribute("userInfo", userInfo)”语句的功能一样
* */
@RequestMapping(value="/ModelTestSecond")
public String ModelTestSecond(@ModelAttribute("UInfo") UserInfo userInfo)
if("vodka".equals(userInfo.getName()) && "lwjsfdsf".equals(userInfo.getPwd()) )
return "Login"; //用户密码匹配成功,返回登录界面
return "Register"; //匹配失败,返回注册界面
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
<html>
<body>
<a href="$pageContext.request.contextPath/Login?name=vodka&pwd=lwj888">登录界面</a> <br>
<a href="$pageContext.request.contextPath/Register">注册界面</a> <br>
<a href="$pageContext.request.contextPath/TestModel?node=One&MyNode=VodkaNode">Model</a> <br>
<a href="$pageContext.request.contextPath/ModelTestSecond?Name=vodka&Pwd=lwj888">ModelTestSecond</a> <br>
</body>
</html>
ModelTest.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Model Test</title>
</head>
<body>
<h1>Model Test</h1>
<p>Nodes: $Nodes</p>
<p>NodeName: $NodeName</p>
</body>
</html>
Register.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
<title>注册界面</title>
</head>
<body>
<h1>欢迎$sessionScope.get("name")来到注册界面</h1>
</body>
</html>
Login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
<%--必须引入的jstl核心--%>
<%@ taglib prefix="v" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>登录界面</title>
</head>
<body>
<v:if test="$Trial=='false'">
<h1>登录失败!</h1> <br>
<v:forEach items="$ErrorList" var="error">
<h1>$error</h1> <br>
</v:forEach>
</v:if>
<v:if test="$Trial=='true'">
<h1>登录成功!</h1> <br>
<v:forEach items="$NameList" var="name">
<h1>欢迎$name来到登录界面</h1>
</v:forEach>
</v:if>
</body>
</html>
以上是关于SpringMVC - @ModelAttribute的主要内容,如果未能解决你的问题,请参考以下文章