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";
}
}