界面:
项目结构:
代码
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>springmvc-2
</display-name>
<filter>
<filter-name>HiddenHttpMethodFilter
</filter-name>
<filter-class> org.springframework.web.filter.HiddenHttpMethodFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter
</filter-name>
<url-pattern>/*
</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springDispatcherServlet
</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation
</param-name>
<param-value>classpath:springmvc.xml
</param-value>
</init-param>
<load-on-startup>1
</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet
</servlet-name>
<url-pattern>/
</url-pattern>
</servlet-mapping>
</web-app>
springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
<context:component-scan base-package="com.jxust.springmvc"></context:component-scan>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<mvc:default-servlet-handler/>
<mvc:annotation-driven></mvc:annotation-driven>
</beans>
Department.java
package com.jxust.springmvc.crud.entities;
/**
* 部门实体类
* @author Peng
* @Date2016年12月3日下午8:33:47
*/
public class Department {
private Integer id;
private String departmentName;
public Department() {
super();
}
public Department(Integer id, String departmentName) {
super();
this.id = id;
this.departmentName = departmentName;
}
public Integer
getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String
getDepartmentName() {
return departmentName;
}
public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
}
@Override
public String
toString() {
return "Department [id=" + id +
", departmentName=" + departmentName +
"]";
}
}
Employee.java
package com.jxust.springmvc.crud.entities;
/**
* 员工实体类
* @author Peng
* @Date2016年12月3日下午8:33:18
*/
public class Employee {
private Integer id;
private String lastName;
private String email;
private Integer gender;
private Department department;
public Employee() {
super();
}
public Employee(Integer id, String lastName, String email, Integer gender, Department department) {
super();
this.id = id;
this.lastName = lastName;
this.email = email;
this.gender = gender;
this.department = department;
}
public void setDepartment(Department department) {
this.department = department;
}
}
DepartmentDao.java
package com.jxust.springmvc.crud.dao;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Repository;
import com.jxust.springmvc.crud.entities.Department;
@Repository
public class DepartmentDao {
private static Map<Integer,Department> departments =
null;
static{
departments =
new HashMap<Integer,Department>();
departments.put(
101,
new Department(
101,
"D-AA"));
departments.put(
102,
new Department(
102,
"D-BB"));
departments.put(
103,
new Department(
103,
"D-CC"));
departments.put(
104,
new Department(
104,
"D-DD"));
departments.put(
105,
new Department(
105,
"D-EE"));
}
public Collection<Department>
getDepartments(){
return departments.values();
}
public Department
getDepartment(Integer id){
return departments.get(id);
}
}
EmployeeDao.java
package com.jxust.springmvc.crud.dao;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.jxust.springmvc.crud.entities.Department;
import com.jxust.springmvc.crud.entities.Employee;
@Repository
public class EmployeeDao {
public static Map<Integer,Employee> employees =
null;
@Autowired
private DepartmentDao departmentDao;
static{
employees =
new HashMap<Integer,Employee>();
employees.put(
1001,
new Employee(
1001,
"E-AA",
"aa@163.com",
1,
new Department(
101,
"D-AA")));
employees.put(
1002,
new Employee(
1002,
"E-BB",
"bb@163.com",
1,
new Department(
102,
"D-BB")));
employees.put(
1003,
new Employee(
1003,
"E-CC",
"cc@163.com",
0,
new Department(
103,
"D-CC")));
employees.put(
1004,
new Employee(
1004,
"E-DD",
"dd@163.com",
0,
new Department(
104,
"D-DD")));
employees.put(
1005,
new Employee(
1005,
"E-EE",
"ee@163.com",
1,
new Department(
105,
"D-EE")));
}
private static Integer inintid =
1006;
public void save(Employee employee){
if(employee.getId()==
null){
employee.setId(inintid++);
}
employee.setDepartment(departmentDao.getDepartment(employee.getDepartment().getId()));
employees.put(employee.getId(), employee);
}
public Collection<Employee>
getAll(){
return employees.values();
}
public Employee
get(Integer id){
return employees.get(id);
}
public void delete(Integer id){
employees.remove(id);
}
}
Controller 控制器
EmployeeHandler.java
package com.jxust.springmvc.curd.handlers;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.jxust.springmvc.crud.dao.DepartmentDao;
import com.jxust.springmvc.crud.dao.EmployeeDao;
import com.jxust.springmvc.crud.entities.Employee;
@Controller
public class EmployeeHandler {
@Autowired
private EmployeeDao employeeDao;
@Autowired
private DepartmentDao departmentDao;
/**
* 显示所有Employee信息 对应list.jsp
*
* @param map
* @return
*/
@RequestMapping(
"/emps")
public String
list(Map<String, Object> map) {
map.put(
"employees", employeeDao.getAll());
System.out.println(
"执行list方法,查询所有员工信息.....");
return "list";
}
/**
* 跳转到添加页面input.jsp
* get 请求
* @param map
* @return
*/
@RequestMapping(value =
"/emp", method = RequestMethod.GET)
public String
input(Map<String, Object> map) {
map.put(
"departments", departmentDao.getDepartments());
map.put(
"employee",
new Employee());
System.out.println(
"执行input方法,跳转到添加页面input.jsp.....");
return "input";
}
/**
* 保存Employee操作
* post 请求
* @param employee
* @return
*/
@RequestMapping(value =
"/emp", method = RequestMethod.POST)
public String
save(Employee employee) {
System.out.println(
"执行save方法,保存添加的数据.....");
employeeDao.save(employee);
return "redirect:/emps";
}
/**
* 删除操作
* delete 请求
* @param id
* @return
*/
@RequestMapping(value =
"/emp/{id}", method = RequestMethod.DELETE)
public String
delete(@
PathVariable("id") Integer id) {
System.out.println(
"执行delete方法,删除一条数据.....");
employeeDao.delete(id);
return "redirect:/emps";
}
/**
* 转到修改页面input.jsp,并回显数据
* get 请求
* @param id
* @param map
* @return
*/
@RequestMapping(value =
"/emp/{id}", method = RequestMethod.GET)
public String
input(@
PathVariable("id") Integer id, Map<String, Object> map) {
map.put(
"employee", employeeDao.get(id));
map.put(
"departments", departmentDao.getDepartments());
return "input";
}
/**
* 执行修改操作时,lastName 不修改,为了防止为null,需要获取从数据库中获取包含该属性值的对象
* @param id
* @param map
*/
@ModelAttribute
public void getEmployee(@
RequestParam(value =
"id", required =
false) Integer id, Map<String, Object> map) {
System.out.println(
"ModelAttribute方法执行....");
if (id !=
null) {
map.put(
"employee", employeeDao.get(id));
}
}
/**
* 修改操作
* put 请求
* @param employee
* @return
*/
@RequestMapping(value =
"/emp", method = RequestMethod.PUT)
public String
update(Employee employee) {
System.out.println(
"执行update方法...");
employeeDao.save(employee);
return "redirect:/emps";
}
}
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here
</title>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
<script type="text/javascript">
$(function() {
});
</script>
</head>
<body>
<a href="emps"> List ALL
</a>
</body>
</html>
list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here
</title>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
<script type="text/javascript">
$(function() {
$(".delete").click(function(){
var href = $(this).attr("href");
$("form").attr("action",href).submit();
return false;
})
});
</script>
</head>
<body>
<form action="" method="post">
<input type="hidden" name="_method" value="DELETE"/>
</form>
<c:if test="${empty requestScope.employees }">
没有任何员工信息。
</c:if>
<c:if test="${!empty requestScope.employees }">
<table border="1" cellpadding="10" cellspacing="0">
<tr>
<td>ID
</td>
<td>LastName
</td>
<td>Email
</td>
<td>Gender
</td>
<td>Department
</td>
<td>Edit
</td>
<td>Delete
</td>
</tr>
<c:forEach items="${requestScope.employees }" var="emp">
<tr>
<th>${emp.id }
</th>
<th>${emp.lastName }
</th>
<th>${emp.email }
</th>
<th>${emp.gender==0?'Female':'Male' }
</th>
<th>${emp.department.departmentName }
</th>
<th><a href="emp/${emp.id}">Edit
</a></th>
<th><a class="delete" href="emp/${emp.id}">Delete
</a></th>
</tr>
</c:forEach>
</table>
</c:if>
<br><br>
<a href="emp">Add New Employee
</a>
</body>
</html>
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>修改和添加都使用这个页面
</title>
</head>
<body>
<form:form action="${pageContext.request.contextPath}/emp" method="post" modelAttribute="employee">
<c:if test="${employee.id == null }">
LastName:
<form:input path="lastName"/> <br>
</c:if>
<c:if test="${employee.id!=null }">
<form:hidden path="id"/>
<input type="hidden" name="_method" value="put"/>
</c:if>
Email:
<form:input path="email"/> <br>
<%
Map<Integer,String> genders = new HashMap<Integer,String>();
genders.put(1, "Male");
genders.put(0, "Female");
request.setAttribute("genders", genders);
%>
Gender:
<br>
<form:radiobuttons path="gender" items="${genders }" delimiter="<br>"/> <br>
Department:
<form:select path="department.id" items="${departments }"
itemLabel="departmentName" itemValue="id"><br>
</form:select>
<input type="submit" value="Submit">
</form:form>
</body>
</html>
笔记.txt
1. form:input,form:password,form:hidden,form:textarea
对应Html表单中的text,password,hidden,textarea 标签
2. form:radiobutton 单选框组件标签,当表单bean 对应的属性值和 value 值相等时,
单选框被选中
form:radiobuttons 单选框组标签,用于构造多个单选框
-
-items 可以是 List、String[] 、Map
-
-itemValue 指定radio的value值,可以是集合中bean的一个属性值
-
-itemLabel 指定radio的label 值
-
-delimiter 多个单选框可以通过 delimiter 指定分隔符
3. form:checkbox 复选框组件,用于构造单个复选框
form:checkboxs 用于构造多个复选框,使用方式同 form:radiobuttons标签
4. form:select 用于构造下拉框组件,使用方式同form:radiobuttons标签
5. form:option 下拉框选项组件标签。使用方式同form:radiobuttons标签
6. form:errors 显示表单组件或者数据校验所对应的错误
-
-<form:errors path="*" /> 显示表单所有错误
-
-<form:errors path="user* /> 显示所有以user为前缀的属性对应的错误
-
-<form:errors path="username"/> 显示特定表单对象属性的错误
-
-------------------------
<mvc:annotation-driven></mvc:annotation-driven>
会自动注册 RequestMappingHandlerMapping、RequestMappingHandlerAdapter
和ExceptionHandlerExceptionResolver三个bean
还提供了以下的支持
-
支持使用ConversionService 示例对表单参数进行类型转换
-
支持使用@NumberFormatannotation、@DateTimeFormat 注解完成数据类型的格式化
-
支持使用 @Valid 注解对 JavaBean 实例进行JSR 303验证
-
支持使用@RequestBody 和 @ResponseBody 注解