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的主要内容,如果未能解决你的问题,请参考以下文章

springmvc的特点

学习笔记——SpringMVC简介;SpringMVC处理请求原理简图;SpringMVC搭建框架

SpringMVC

springMVC学习笔记初识springmvc

SpringMVC

springMVC1 springmvc的基础知识