SpringMVC注解
@RequestMapping
- 在類上:給模塊添加根路徑
- 在方法上:方法具體的路徑
屬性:
- value:默認屬性,value屬性主要指定的是方法被訪問的具體路徑
- method:可以指定方法對應的請求方式,如果客戶端請求的方式和方法設(shè)置的方式不同,請求不成功(405錯誤)
可以將數(shù)據(jù)存放到request中,也可以將數(shù)據(jù)存放到session中,返回類型是javabean類型,
@RequestMapping("/emps")
public String getUsersPage(Model model, HttpSession session){
List<Emp> list = empService.getAllEmps();
model.addAttribute("list", list);
session.setAttribute("list", list);
return "emp.jsp";
}
@RequestParam
表單參數(shù)處理的注解
屬性:
- value屬性:默認屬性,value屬性主要用于方法參數(shù)名和表單參數(shù)名不一致時
- defaultvalue屬性:如果客戶端沒有在請求傳參,那么我們將得到null,我們不 希望得到null,希望得到一個默認值,這個時候,我們還需要使用@RequestParam defaultValue屬性進行對應的設(shè)置。
@GetMapping("/deleteById/{id}")
傳單個值的參數(shù)
獲取值
public String deleteByEid(@PathVariable int eid){}
@PostMapping("/***")
能夠接收表單參數(shù),要求表單的name于bean成員變量一致
@PostMapping("/updateEmp")
public String updateEmp(Emp e){
//System.out.println(request.getParameter("eid"));
System.out.println(e);
boolean flag = empService.updateEmp(e);
if(flag){
return "redirect:/emp/emps";
}
return "";
}
校驗與國際化
添加一個配置文件,此文件的效果是前天出現(xiàn)輸入錯誤時,錯誤信息會根據(jù)不同的語言進行表達,文件名已msg開頭、語言居中、國家簡寫在后
msg_en_US.properties
emp.eid=the eid of employee cannot be empty.
emp.name=the name of employee cannot be empty.
emp.salary=the salary of employee cannot be empty.
emp.salary.invalidate=the salary of employee cannot be negative.
在spring配置文件中添加,id必須為messageSource
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/msg" />
</bean>
添加一個實現(xiàn)Validator的類,里面包含兩個方法,supports和validate,supports方法的意思是當前類用來對于哪個類實現(xiàn)校驗,Emp.class.isAssignableFrom(clazz);意思是完成對與Emp類的校驗,validate方法,完成真正的校驗,一定是滿足了supports方法之后才會進入該方法來進行校驗
public class EmpValidate implements Validator {
/**
* 指定當前類是否支持指定類型的校驗
* @param clazz
* @return
*/
@Override
public boolean supports(Class<?> clazz) {
return Emp.class.isAssignableFrom(clazz);
}
/**
* 真正的校驗方法
* @param target,校驗對象
* @param errors,存儲錯誤信息
*/
@Override
public void validate(Object target, Errors errors) {
Emp e = (Emp) target;
/**
*
* 非空校驗
*
* 使用ValidationUtils工具類來實現(xiàn)對于某些非空字段的校驗,該方法包含三個參數(shù):
* 1. 錯誤對象,用來收集并存儲錯誤信息
* 2. 要校驗的字段
* 3. 錯誤碼,在msg配置文件中配置的key信息
*/
ValidationUtils.rejectIfEmpty(errors, "eid", "emp.eid");
ValidationUtils.rejectIfEmpty(errors, "name", "emp.name");
ValidationUtils.rejectIfEmpty(errors, "salary", "emp.salary");
double salary = e.getSalary();
/**
* 合法性校驗,使用errors對象的rejectValue()方法完成合法性校驗,里面包含了兩個參數(shù)
*
* 1. field,在哪個字段上完成校驗
* 2. 錯誤碼,會在msg文件中找到該key對應的錯誤信息
*/
if(salary < 0){
errors.rejectValue("salary", "emp.salary.invalidate");
}
}
在這個方法中創(chuàng)建了一個EmplooyeeValidate對象用于進行校驗,這個方法接收三個參數(shù),第一個參數(shù)是前臺頁面?zhèn)鬟^來的,第二個參數(shù)類型是一個接口,繼承于Errors,用于保存錯誤信息,第三個參數(shù)用于向request域中添加屬性。
@PostMapping("/saveEmp")
public String saveEmp(Emp e, BindingResult errors, Model model){
/**
* 調(diào)用自己寫好的校驗類來完成對于Emp對象的校驗
*/
EmpValidate ev = new EmpValidate();
ev.validate(e, errors);
if(errors.hasErrors()){
model.addAttribute("emp", e);
return "saveEmp.jsp";
}
return "redirect:/emp/emps";
}
頁面上也需添加錯誤信息的標簽,先需要導入標簽,然后使用
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="f" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--<form action="" method="post">
eid:<input type="text" name="eid" />
</form>--%>
<f:form method="post" action="/emp/saveEmp" commandName="emp">
eid:<f:input path="eid" /><font color="red"><f:errors path="eid" /></font> <br>
name:<f:input path="name" /><font color="red"> <f:errors path="name" /></font><br>
salary:<f:input path="salary" /><font color="red"> <f:errors path="salary" /></font><br>
<input type="submit" value="submit" /> <br>
</f:form>
</body>