`
wisfly
  • 浏览: 62942 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

@ModelAttribute使用

 
阅读更多

小伙伴们,我开了一家海淘护肤品淘宝店,搜索店铺“禾子蝶的海淘铺”,正品保证,欢迎进店选购哦。谢谢!

 

在Spring MVC里,@ModelAttribute通常使用在Controller方法的参数注解中,用于解释model entity,但同时,也可以放在方法注解里。

如果把@ModelAttribute放在方法的注解上时,代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法

 

比如我们有一个Controller:TestController

复制代码
@Controller
@RequestMapping(value="test")
public class PassportController {

    @ModelAttribute
    public void preRun() {
        System.out.println("Test Pre-Run");
    }
    
    @RequestMapping(method=RequestMethod.GET)
    public String index() {
        return "login/index";
    }
    
    @RequestMapping(value="login", method=RequestMethod.POST)
    public ModelAndView login(@ModelAttribute @Valid Account account, BindingResult result)
        :
        :
    }
    
    @RequestMapping(value="logout", method=RequestMethod.GET)
    public String logout() {
        :
        :
    }
    
}
复制代码

在调用所有方法之前,都会先执行preRun()方法。

 

我们可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。

比如权限的验证(也可以使用Interceptor)等

下面是一个设置request和response的方式(这个未测试,不知有没线和安全问题)

复制代码
package com.my.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.bind.annotation.ModelAttribute;

public class BaseController {
    
    protected HttpServletRequest request;  
    protected HttpServletResponse response;  
    protected HttpSession session;
      
    @ModelAttribute
    public void setReqAndRes(HttpServletRequest request, HttpServletResponse response){  
        this.request = request;
        this.response = response;
        this.session = request.getSession();
    }
    
}
复制代码

 


 

 

@ModelAttribute也可以做为Model输出到View时使用,比如:

测试例子

复制代码
package com.my.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.my.controller.bean.Account;

@Controller
@RequestMapping(value="attr")
public class TestModelAttributeController {
    
    private static List<Account> accounts = new ArrayList<Account>();
    {
        accounts.add(new Account());
        accounts.add(new Account());
        
        Account ac1 = accounts.get(0);
        Account ac2 = accounts.get(1);
        
        ac1.setUserName("Robin");
        ac1.setPassword("123123");
        
        ac2.setUserName("Lucy");
        ac2.setPassword("123456");
    }

    @RequestMapping(method=RequestMethod.GET)
    public String index() {
        System.out.println("index");
        return "TestModelAttribute/index";
    }
    
    @ModelAttribute("accounts")
    public List<Account> getAccounts() {
        System.out.println("getAccounts");
        return accounts;
    }
    
}
复制代码
复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="st" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TestModelAttribute</title>
</head>
<body>
    <c:forEach items="${accounts}" var="item">
        <c:out value="${item.userName}"></c:out><br/>
    </c:forEach>
</body>
</html>
复制代码

页面将输出:

在Console中输出为:

 

这里可以看到,运行的先后次序为:先调用getAccounts(),再调用index()。

 

THE END

 小伙伴们,我开了一家海淘护肤品淘宝店,搜索店铺“禾子蝶的海淘铺”,正品保证,欢迎进店选购哦。谢谢!

分享到:
评论

相关推荐

    Spring MVC 之@ModelAttribute使用.rar

    在Spring MVC框架中,`@ModelAttribute`是一个非常关键的注解,它主要用于处理HTTP请求与控制器...在实际开发中,熟练掌握`@ModelAttribute`的使用,可以更好地发挥Spring MVC的威力,构建出高效、健壮的Web应用程序。

    SpringMVC @ModelAttribute应用

    当你在控制器方法的参数上使用`@ModelAttribute`时,Spring MVC会尝试在请求中找到与参数名匹配的值,并将这些值赋给对应的Java对象的属性。例如,如果你有一个名为`User`的类,包含`name`和`email`字段,你可以这样...

    Spring3MVC 在JSP中使用@ModelAttribute

    本文将深入探讨在JSP中如何使用`@ModelAttribute`,以及它在实际开发中的应用。 首先,`@ModelAttribute`通常用在控制器(Controller)方法的参数上,它的主要作用是将HTTP请求中的数据与Java对象进行映射,从而...

    java中@ModelAttribute注解的作用

    如果没有使用`@ModelAttribute`,那么在控制器方法中接收的User对象的`pass`属性将会是null。这是因为Spring MVC默认只会将表单中出现的字段值映射到对象的相应属性上。 为了解决这个问题,我们可以使用`@...

    Spring boot @ModelAttribute标注的实现

    在上面的示例代码中,我们使用@ModelAttribute注释了createDefaultUser方法,并指定了属性名称为"defaultuser",以便在checkDefaultUser方法中使用。 小结 在本文中,我们详细介绍了@ModelAttribute注释的实现和...

    spring mvc中的@ModelAttribute注解示例介绍

    本文将深入探讨`@ModelAttribute`的工作原理、使用场景以及如何通过示例来理解其功能。 首先,`@ModelAttribute`可以用于控制器类(`@Controller`)的方法参数上,它的主要目的是将HTTP请求中的数据(例如,请求...

    spring mvc中注解@ModelAttribute的妙用分享

    文章中提到的创新性使用方式是创建一个基础控制器类(BaseController),在其中利用`@ModelAttribute`注解来初始化`HttpServletRequest`、`ModelMap`和`HttpServletResponse`,这样在子控制器中就可以直接访问这些...

    PNC_Lab04:Ingreso产品@Valid @ModelAttribute和BindingResult。 SpringMVC

    在本实验"PNC_Lab04"中,我们将深入探讨Spring MVC框架中关于数据验证的重要概念,特别是`@Valid`, `@ModelAttribute`以及`BindingResult`。这些元素在开发基于Web的应用程序时起着关键作用,尤其是在处理用户输入并...

    spring学习教程之@ModelAttribute注解运用详解

    @ModelAttribute注解运用详解 @ModelAttribute注解是Spring框架中的一种重要注解,用于将模型数据绑定到控制器的方法参数中。...正确使用@ModelAttribute注解可以使我们的控制器代码更加简洁、灵活。

    [Spring MVC] - ModelAttribute使用.docx

    在本文中,我们将深入探讨`@ModelAttribute`的使用及其在控制器(Controller)中的作用。 首先,`@ModelAttribute`最常见的用法是作为控制器方法参数的注解。当我们在一个控制器方法的参数上使用`@ModelAttribute`...

    ModelAttribute注解详细使用.docx

    ### ModelAttribute注解详解 在Spring MVC框架中,`@ModelAttribute`注解是一个...正确地使用`@ModelAttribute`不仅可以提高代码的可读性和维护性,还能有效地减少不必要的数据处理步骤,从而提高应用程序的整体性能。

    modelAttribute详解

    - **使用`@ModelAttribute`**:在控制器方法中明确使用`@ModelAttribute`注解,可以看到前后端数据交互的一致性。 - 结论:无论是否显式使用`@ModelAttribute`注解,其功能是等价的,都能实现数据绑定和传递。 2....

    SpringMVC ModelAttribute详解.docx

    在Spring MVC框架中,`@ModelAttribute`注解扮演着至关重要的角色,它是数据绑定和模型对象创建的关键。本文将深入探讨`@ModelAttribute`的工作原理及其常见应用场景。 首先,`@ModelAttribute`注解可以用于两个...

    spring mvc RequestParam与 ModelAttribute异同.docx

    - 当使用 `@ModelAttribute` 时,Spring MVC会尝试根据参数名在请求中查找相应的参数,并将这些参数的值映射到对象的相应属性上。如果请求参数与对象属性不完全匹配,未找到的属性将保持其初始值(通常是Java Bean...

    SpringMVC基础—— ModelAttribute和 SessionAttribute.docx

    `@ModelAttribute`通常与`@RequestMapping`一起使用,以确保在处理请求时,所需的数据已经准备就绪。 1. **@ModelAttribute 注解的使用** 当一个方法被`@ModelAttribute`标记时,Spring MVC会在调用实际的处理...

    SpringMVC SessionAttribute 使用说明.docx

    它通常与`@ModelAttribute`配合使用,`@ModelAttribute`注解用于将方法的返回值或参数绑定到模型(Model)中,以便在视图解析时可用。 ### `@ModelAttribute` 的作用 `@ModelAttribute` 有以下两个主要用途: 1. **...

    SpringMVC处理模型数据-2.docx

    此外,`@ModelAttribute`还支持预填充对象的方法,即可以在控制器方法中定义一个带有`@ModelAttribute`的方法来预先设置对象的某些属性。 **示例代码:** ```java @RequestMapping("/form") public String form...

    springMVC三种数据转换的Demo

    本示例Demo将详细介绍三种数据转换方法:`@ModelAttribute`、`Converter`和`CustomEditor`。 1. `@ModelAttribute` `@ModelAttribute`是Spring MVC中用于将请求参数绑定到方法参数的一个注解。当我们在控制器方法的...

    java spring mvc项目,通过URL地址传递对象参数给action.zip

    本教程将详细解释如何通过URL地址传递对象参数给Action,即控制器方法,主要关注`@ModelAttribute`注解的使用。 1. **对象作为参数** 在传统的HTTP请求中,我们通常通过URL查询字符串或POST请求体来传递简单的键值...

    spring笔记

    `class`属性是必不可少的,它指定了bean实例化时所使用的Java类。Spring容器可以通过两种方式创建bean:使用无参构造函数或调用静态工厂方法。无参构造函数是最常见的,但如果你的类有一个静态工厂方法,你可以通过`...

Global site tag (gtag.js) - Google Analytics