SpringMVC - @ModelAttribute

25 篇文章 0 订阅
13 篇文章 0 订阅
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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值