SpringMVC——常用註解說明

ModelAttribute

  • 作用:用在方法上,表示當前方法會在控制器的方法執行之前執行;用在參數上獲取指定的數據給參數賦值。
  • 常用屬性
屬性 功能
value 用於獲取數據的key
  • 應用場景:當表單提交數據不是完整的實體類數據時,保證沒有提交數據的字段使用數據庫對象原來的數據。

示例代碼

基於POJO屬性的基本使用

編寫jsp代碼

<%@page contentType="text/html; charset=UTF-8" language="java"  isELIgnored="false" %>

<html>
    <head>
        <title>requestMapping的使用</title>
    </head>
    <body>
        <!--ModelAttribute註解的基本使用-->
        <a href="springmvc/testModelAttribute?username=test">測試ModelAttribute</a>
    </body>
</html>

編寫Controller代碼

package com.liang.controller;

import com.liang.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller(value = "annotationController")
@RequestMapping(path = "/springmvc")
public class AnnotationController {

    @RequestMapping(path = "/testModelAttribute")
    public String testModelAttribute(User user) {
        System.out.println("執行了testModelAttribute方法...  " + user.getUsername());
        return "success";
    }

    /**
     * 被ModelAttribute修飾的方法
     * @param user
     */
    @ModelAttribute
    public void showModel(User user)
    {
        System.out.println("執行了showModel方法... "+user.getUsername());
    }

}
ModelAttribute修飾方法帶返回值

編寫jsp代碼

<%@page contentType="text/html; charset=UTF-8" language="java"  isELIgnored="false" %>

<html>
    <head>
        <title>requestMapping的使用</title>
    </head>
    <body>
        <!--修改用戶信息 —— 要求用戶的密碼不能修改-->
        <form action="springmvc/updateUser" method="post">
            用戶名稱:<input type="text" name="username"/><br/>
            用戶年齡:<input type="text" name="age"/><br/>
            <input type="submit" value="保存"/>
        </form>
    </body>
</html>

編寫實體類

package com.liang.domain;

import java.io.Serializable;

public class User implements Serializable {

    private String username;
    private String password;
    private Integer age;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                '}';
    }
}

編寫Controller代碼

package com.liang.controller;

import com.liang.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller(value = "annotationController")
@RequestMapping(path = "/springmvc")
public class AnnotationController {

    @RequestMapping(path = "/updateUser")
    public String updateUser(User user)
    {
        System.out.println("updateUser方法執行了... "+user);
        return "success";
    }

    @ModelAttribute
    public User showModel(String username){
        //模擬去數據庫查詢
        User user = findUserByName(username);
        System.out.println("執行了showModel方法... "+ user);
        return user;
    }

    /**
     * 模擬去數據庫查詢
     * @param username
     * @return
     */
    private User findUserByName(String username) {
        User user = new User();
        user.setUsername(username);
        user.setAge(18);
        user.setPassword("123456");

        return user;
    }

}
ModelAttribute修飾方法不帶返回值

編寫jsp代碼

<%@page contentType="text/html; charset=UTF-8" language="java"  isELIgnored="false" %>

<html>
    <head>
        <title>requestMapping的使用</title>
    </head>
    <body>
        <!--修改用戶信息 —— 要求用戶的密碼不能修改-->
        <form action="springmvc/updateUser" method="post">
            用戶名稱:<input type="text" name="username"/><br/>
            用戶年齡:<input type="text" name="age"/><br/>
            <input type="submit" value="保存"/>
        </form>
    </body>
</html>

編寫Controller代碼

package com.liang.controller;

import com.liang.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Map;

@Controller(value = "annotationController")
@RequestMapping(path = "/springmvc")
public class AnnotationController {

    @RequestMapping(path = "/updateUser")
    public String updateUser(@ModelAttribute("user1") User user)
    {
        System.out.println("updateUser方法執行了... "+user);
        return "success";
    }

    @ModelAttribute
    public void showModel(String username, Map<String,User> userMap){
        //模擬去數據庫查詢
        User user = findUserByName(username);
        System.out.println("執行了showModel方法... "+ user);
        userMap.put("user1",user);
    }

    /**
     * 模擬去數據庫查詢
     * @param username
     * @return
     */
    private User findUserByName(String username) {
        User user = new User();
        user.setUsername(username);
        user.setAge(18);
        user.setPassword("123456");

        return user;
    }
}

SessionAttribute

  • 作用:用於多次執行控制器方法間的參數共享,即將指定的Model中的鍵值對添加到session中。
  • 常用屬性
屬性 功能
value 用於指定存入的屬性名稱
type 用於指定存入的數據類型

示例代碼

編寫jsp代碼

<%@page contentType="text/html; charset=UTF-8" language="java"  isELIgnored="false" %>

<html>
    <head>
        <title>requestMapping的使用</title>
    </head>
    <body>
        <!--SessionAttribute註解的使用-->
        <a href="springmvc/testPut">存入SessionAttribute</a><br/><br/>
        <a href="springmvc/testGet">獲取SessionAttribute</a><br/><br/>
        <a href="springmvc/testClean">清除SessionAttribute</a><br/><br/>
    </body>
</html>

編寫Controller代碼

package com.liang.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;

import java.util.Map;

@Controller(value = "annotationController")
@RequestMapping(path = "/springmvc")
@SessionAttributes(value = {"username","password","age"})
public class AnnotationController {

    @RequestMapping(path = "/testPut")
    public String testPut(Model model)
    {
        model.addAttribute("username","張三");
        model.addAttribute("password","123456");
        model.addAttribute("age",24);
        return "success";
    }

    @RequestMapping(path = "/testGet")
    public String testGet(Model model, ModelMap modelMap)
    {
        System.out.println(model.getAttribute("username")+" : "+model.getAttribute("password")+" : "+model.getAttribute("age"));
        System.out.println("-------------------");
        System.out.println(modelMap.get("username")+" : "+ modelMap.get("password")+" : "+modelMap.get("age"));
        return "success";
    }

    @RequestMapping(path = "/testClean")
    public String testClean(SessionStatus sessionStatus){
        sessionStatus.setComplete();
        return "success";
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章