1、首先創建兩個bean類,Employee(職工)和Department(部門),一個部門可以有多個職工
Employee類(屬性:職工ID:id;姓名:lastName;郵箱:email;性別:gender;所屬部門:department)

1 package com.bwlu.bean; 2 public class Employee { 3 private Integer id; 4 private String lastName; 5 private String email; 6 //1 male, 0 female 7 private Integer gender; 8 private Department department; 9 public Employee() { 10 11 } 12 public Employee(Integer id, String lastName, String email, Integer gender, 13 Department department) { 14 super(); 15 this.id = id; 16 this.lastName = lastName; 17 this.email = email; 18 this.gender = gender; 19 this.department = department; 20 } 21 public Integer getId() { 22 return id; 23 } 24 public void setId(Integer id) { 25 this.id = id; 26 } 27 public String getLastName() { 28 return lastName; 29 } 30 public void setLastName(String lastName) { 31 this.lastName = lastName; 32 } 33 public String getEmail() { 34 return email; 35 } 36 public void setEmail(String email) { 37 this.email = email; 38 } 39 public Integer getGender() { 40 return gender; 41 } 42 public void setGender(Integer gender) { 43 this.gender = gender; 44 } 45 public Department getDepartment() { 46 return department; 47 } 48 public void setDepartment(Department department) { 49 this.department = department; 50 } 51 @Override 52 public String toString() { 53 return "Employee [id=" + id + ", lastName=" + lastName + ", email=" 54 + email + ", gender=" + gender + ", department=" + department 55 + "]"; 56 } 57 }
Department類(屬性:部門ID:id;部門名稱:departmentName)

1 package com.bwlu.bean; 2 public class Department { 3 private Integer id; 4 private String departmentName; 5 public Department() { 6 7 } 8 public Department(int i, String string) { 9 this.id = i; 10 this.departmentName = string; 11 } 12 public Integer getId() { 13 return id; 14 } 15 public void setId(Integer id) { 16 this.id = id; 17 } 18 public String getDepartmentName() { 19 return departmentName; 20 } 21 public void setDepartmentName(String departmentName) { 22 this.departmentName = departmentName; 23 } 24 @Override 25 public String toString() { 26 return "Department [id=" + id + ", departmentName=" + departmentName+ "]"; 27 } 28 }
2、然后分別實現兩個bean類的Dao層方法(沒有連接數據庫,采用Map存儲數據)
EmployeeDao類(添加和更新:save();獲取:getAll()和get();刪除:delete())

1 package com.bwlu.dao; 2 import java.util.Collection; 3 import java.util.HashMap; 4 import java.util.Map; 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.stereotype.Repository; 7 import com.bwlu.bean.Department; 8 import com.bwlu.bean.Employee; 9 @Repository 10 public class EmployeeDao { 11 private static Map<Integer, Employee> employees = null; 12 @Autowired 13 private DepartmentDao departmentDao; 14 static{ 15 employees = new HashMap<Integer, Employee>(); 16 17 employees.put(1001, new Employee(1001, "E-AA", "aa@163.com", 1, new Department(101, "D-AA"))); 18 employees.put(1002, new Employee(1002, "E-BB", "bb@163.com", 1, new Department(102, "D-BB"))); 19 employees.put(1003, new Employee(1003, "E-CC", "cc@163.com", 0, new Department(103, "D-CC"))); 20 employees.put(1004, new Employee(1004, "E-DD", "dd@163.com", 0, new Department(104, "D-DD"))); 21 employees.put(1005, new Employee(1005, "E-EE", "ee@163.com", 1, new Department(105, "D-EE"))); 22 } 23 private static Integer initId = 1006; 24 public void save(Employee employee){ 25 if(employee.getId() == null){ 26 employee.setId(initId++); 27 } 28 employee.setDepartment(departmentDao.getDepartment(employee.getDepartment().getId())); 29 employees.put(employee.getId(), employee); 30 } 31 public Collection<Employee> getAll(){ 32 return employees.values(); 33 } 34 public Employee get(Integer id){ 35 return employees.get(id); 36 } 37 public void delete(Integer id){ 38 employees.remove(id); 39 } 40 }
DepartmentDao類(獲取:getDepartments()和getDepartment())

1 package com.bwlu.dao; 2 import java.util.Collection; 3 import java.util.HashMap; 4 import java.util.Map; 5 import org.springframework.stereotype.Repository; 6 import com.bwlu.bean.Department; 7 @Repository 8 public class DepartmentDao { 9 private static Map<Integer, Department> departments = null; 10 static{ 11 departments = new HashMap<Integer, Department>(); 12 departments.put(101, new Department(101, "D-AA")); 13 departments.put(102, new Department(102, "D-BB")); 14 departments.put(103, new Department(103, "D-CC")); 15 departments.put(104, new Department(104, "D-DD")); 16 departments.put(105, new Department(105, "D-EE")); 17 } 18 public Collection<Department> getDepartments(){ 19 return departments.values(); 20 } 21 public Department getDepartment(Integer id){ 22 return departments.get(id); 23 } 24 }
3、前端頁面的實現,一共有三個頁面,顯示頁面(showEmployee.jsp),詳情頁面(detail.jsp),添加和修改頁面(addOrEdit.jsp)
showEmployee.jsp,采用jstl標簽進行遍歷,
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3 <% 4 String path = request.getContextPath(); 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 6 %> 7 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 8 <html> 9 <head> 10 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 11 <title>員工列表</title> 12 <script type="text/javascript" src="<%=basePath %>public/js/jquery-3.2.1.min.js"></script> 13 <script type="text/javascript"> 14 function delConfirm(id){ 15 var b=confirm("確定刪除嗎?"); 16 if(b){ 17 $(function(){ 18 //REST請求風格的url【delete】 19 var url="${pageContext.request.contextPath}/Employee/delete/"+id; 20 //將REST請求風格的url綁定到form表單的action屬性中,並做提交 21 $("#delForm").attr("action",url).submit(); 22 }); 23 } 24 } 25 </script> 26 </head> 27 <body> 28 <div align="center"> 29 <a class="aBtn" id="add" href='<c:url value="/Employee/goAddOREdit?id="></c:url>'>添加</a> 30 <table> 31 <c:choose> 32 <c:when test="${not empty employeeList }"> 33 <tr><th>ID</th><th>姓名</th><th>郵箱</th><th>性別</th><th>部門</th><th>操作</th></tr> 34 <c:forEach var="employee" items="${employeeList }"> 35 <tr><td>${employee.id }</td><td>${employee.lastName }</td><td>${employee.email }</td> 36 <td>${employee.gender==0?'女':'男'}</td> 37 <td>${employee.department.departmentName }</td> 38 <td><a href='<c:url value="/Employee/detail/${employee.id }"></c:url>'>詳情</a> 39 <a href='<c:url value="/Employee/goAddOREdit?id=${employee.id }"></c:url>'>修改</a> 40 <a onclick="delConfirm(${employee.id })">刪除</a></td></tr> 41 </c:forEach> 42 </c:when> 43 <c:otherwise> 44 暫無數據 45 </c:otherwise> 46 </c:choose> 47 </table> 48 </div> 49 <!-- 用來將post請求轉化為delete請求 --> 50 <form id="delForm" action="" method="post"> 51 <input type="hidden" name="_method" value="delete"> 52 </form> 53 </body> 54 </html>
detail.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 4 <%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %> 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 6 <html> 7 <head> 8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 9 <title>詳情頁面</title> 10 </head> 11 <body> 12 <div align="center"> 13 <form:form action="" menthod="post"modelAttribute="employee"><!-- modelAttribute屬性指定綁定的模型屬性 --> 14 ID:<form:input path="id"/><br><!-- path就是input標簽的name屬性 --> 15 姓名:<form:input path="lastName"/><br> 16 郵箱:<form:input path="email"/><br> 17 性別:<input type="text" value="${employee.gender==0?'女':'男'}"><br><!-- 這里不知道用form標簽怎么處理 --> 18 部門:<form:input path="department.departmentName"/><br> 19 <a href="${pageContext.request.contextPath}/Employee/show">返回</a> 20 </form:form> 21 </div> 22 </body> 23 </html>
addOrEdit.jsp
1 <%@page import="java.util.HashMap"%> 2 <%@page import="java.util.Map"%> 3 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 4 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 5 <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 7 <html> 8 <head> 9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 10 <title>新增和修改頁面</title> 11 </head> 12 <body> 13 <div align="center"> 14 <form:form action="${pageContext.request.contextPath}/Employee/addOrUpdate" menthod="post" modelAttribute="employee"> 15 <!-- 如果employee.id不為null,則將post請求轉化為put請求 --> 16 <c:if test="${not empty employee.id }"> 17 <input type="hidden" name="_method" value="put"> 18 </c:if> 19 <input type="hidden" name="id" value="${employee.id }"> 20 姓名:<form:input path="lastName"/><br> 21 郵箱:<form:input path="email"/><br> 22 <% 23 Map<String,Object> genderMap=new HashMap<String,Object>(); 24 genderMap.put("0", "女"); 25 genderMap.put("1", "男"); 26 request.setAttribute("genderMap", genderMap); 27 %> 28 <!-- 進行修改時,性別和部門會自動匹配,不用我們自己設置 --> 29 性別:<form:radiobuttons path="gender"items="${genderMap }"/><br><!-- 運行時自動生成單選鈕 --> 30 部門:<form:select path="department.id"items="${departList }" 31 itemLabel="departmentName"itemValue="id"><!-- 運行時自動生成下拉列表 --> 32 </form:select><br> 33 <input type="submit" value="提交"> 34 </form:form> 35 </div> 36 </body> 37 </html>
4、在后台寫相應的方法
1 @Controller 2 @RequestMapping("/Employee") 3 public class EmployeeController { 4 @Autowired 5 private EmployeeDao employeeDao; 6 @Autowired 7 private DepartmentDao departmentDao; 8 @RequestMapping(value="/show",method=RequestMethod.GET) 9 public String showEmployee(Model m){//顯示所有職工 10 Collection<Employee> employeeList=new ArrayList<Employee>(); 11 Collection<Department> departList=new ArrayList<Department>(); 12 employeeList=employeeDao.getAll(); 13 departList=departmentDao.getDepartments(); 14 m.addAttribute("employeeList", employeeList); 15 m.addAttribute("departList", departList); 16 return "employee/showEmployee"; 17 } 18 @RequestMapping(value="/goAddOREdit",method=RequestMethod.GET) 19 public String goAddOREdit(Model m,@RequestParam(value="id") Integer id){//去添加和修改頁面 20 Employee employee=new Employee(); 21 Collection<Department> departList=new ArrayList<Department>(); 22 if(id!=null) 23 employee=employeeDao.get(id); 24 departList=departmentDao.getDepartments(); 25 m.addAttribute("employee", employee); 26 m.addAttribute("departList", departList); 27 return "employee/addOrEdit"; 28 } 29 @RequestMapping(value="/addOrUpdate",method=RequestMethod.POST) 30 public String add(Employee employee){//添加職工 31 employeeDao.save(employee); 32 return "redirect:/Employee/show"; 33 } 34 @RequestMapping(value="/addOrUpdate",method=RequestMethod.PUT) 35 public String update(Employee employee){//修改職工 36 employeeDao.save(employee); 37 return "redirect:/Employee/show"; 38 } 39 @RequestMapping(value="/detail/{id}",method=RequestMethod.GET) 40 public String detail(Model m,@PathVariable(value="id") Integer id){//職工詳情 41 Employee employee=employeeDao.get(id); 42 m.addAttribute("employee", employee); 43 return "employee/detail"; 44 } 45 @RequestMapping(value="/delete/{id}",method=RequestMethod.DELETE) 46 public String delete(@PathVariable(value="id") Integer id) throws IOException{//刪除職工 47 employeeDao.delete(id); 48 return "redirect:/Employee/show"; 49 } 50 }
使用REST請求風格需要在web.xml中進行配置,請參見 如何使用REST請求風格