编辑功能数据回显和下拉框绑定
思路:
进入页面前先进入方法查询需要的两个值传给前台
前台接收后通过value赋值数据回显
通过el表达式和c:foreach循环进行下拉框绑定
<%--使用jstl表达式定义变量并赋值--%>
<select name="did">
<c:set value="${emps.did}" var="did"></c:set>
<c:forEach items="${depts}" var="dept">
<option value="${dept.did}" <c:if test="${dept.did==did}">selected</c:if>>${dept.dname}</option>
</c:forEach>
EmpServlet .java
package com.servlet;
import com.alibaba.fastjson.JSON;
import com.bean.Dept;
import com.bean.Emp;
import com.dao.impl.DeptDaoImpl;
import com.dao.impl.EmpDaoImpl;
import com.dao.EmpDao;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.List;
@WebServlet("/empServlet")
public class EmpServlet extends HttpServlet {
EmpDao ed = new EmpDaoImpl();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getParameter("method");
try {
this.getClass().getDeclaredMethod(method,HttpServletRequest.class,HttpServletResponse.class).invoke(this,request,response);
} catch (Exception e) {
e.printStackTrace();
}
}
//更新前emp
private void updateEmp(HttpServletRequest request, HttpServletResponse response) throws SQLException, ServletException, IOException {
int eid = Integer.valueOf(request.getParameter("eid"));
//通过员工编号获取该用户的所有信息
Emp empById = ed.getEmpById(eid);
//将数据储存,返回页面
request.setAttribute("emps",empById);
List<Dept> depts = new DeptDaoImpl().getAllDept();
request.setAttribute("depts",depts);
request.getRequestDispatcher("EmpEdit.jsp").forward(request,response);
}
//更新emp
private void editEmp(HttpServletRequest request, HttpServletResponse response) throws SQLException, ServletException, IOException {
int eid = Integer.valueOf(request.getParameter("eid"));
String ename = new String(request.getParameter("ename").getBytes("iso-8859-1"), "utf-8");;
int eage = Integer.valueOf(request.getParameter("eage"));
String email = request.getParameter("email");
int did = Integer.valueOf(request.getParameter("did"));
Emp emp = new Emp();
emp.setEid(eid);
emp.setEname(ename);
emp.setEage(eage);
emp.setEmail(email);
emp.setDid(did);
//执行更新
int i = ed.editByid(emp);
System.out.println(i);
if (i!=0){
request.getRequestDispatcher("empServlet?method=ShowAllEmp").forward(request,response);
}
}
}
EmpEdit.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/empServlet?method=editEmp" method="post">
<table>
<tr>
<td>名字</td>
<td>
<input type="text" name="ename" value="${emps.ename}"/>
<input type="hidden" name="eid" value="${emps.eid}"/>
</td>
</tr>
<tr>
<td>年龄</td>
<td><input type="text" name="eage" value="${emps.eage}"/></td>
</tr>
<tr>
<td>邮箱</td>
<td><input type="text" name="email" value="${emps.email}"/></td>
</tr>
<tr>
<td>部门</td>
<td>
<%--使用jstl表达式定义变量并赋值--%>
<select name="did">
<c:set value="${emps.did}" var="did"></c:set>
<c:forEach items="${depts}" var="dept">
<option value="${dept.did}" <c:if test="${dept.did==did}">selected</c:if>>${dept.dname}</option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<td><input type="submit" value="更新"></td>
</tr>
</table>
</form>
</body>
</html>
隐藏域控件
<input type="hidden" name="eid" value="${emps.eid}"/>
servlet中使用反射获取当前类中的方法
前台调用
editEmp方法名
<form action="/empServlet?method=editEmp" method="post">
</form>
重写servlet中的service (此方法作用等于get,post)
this.getClass()//本类
getDeclaredMethod(//获取本类中的所有方法
method,//从前台获取的参数
HttpServletRequest.class,//HttpServletRequest类
HttpServletResponse.class,//HttpServletResponse类
)
invoke(this,request,response),//继续进行本类传参
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getParameter("method");
try {
this.getClass().getDeclaredMethod(method,HttpServletRequest.class,HttpServletResponse.class).invoke(this,request,response);
} catch (Exception e) {
e.printStackTrace();
}
}