zoukankan      html  css  js  c++  java
  • 如何用Spring框架的<form:form>标签实现REST风格的增删改查操作

    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 }
    Employee

    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 }
    Department

    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 }
    EmployeeDao

    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 }
    DepartmentDao

    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>

    SpringMVC的<form:form>标签简介

    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请求风格

  • 相关阅读:
    multimap-rebgin
    multiset-lower_bound
    multiset-lower_bound
    multimap-max_size
    multimap-max_size
    multimap-find
    最小生成树之prim算法
    最小生成树的邻接矩阵实现
    最短路径:(Dijkstra & Floyd)
    邻接表实现图的储存,遍历
  • 原文地址:https://www.cnblogs.com/lixiang1993/p/7417403.html
Copyright © 2011-2022 走看看