多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 建立路由 struts.xml ``` <!-- 编辑数据 --> <action name="edit" class="teacher.Edit"> <result name="success">/jsp/teacher/edit.jsp</result> <result name="error">/jsp/error.jsp</result> </action> ``` # C层 新建 teacher.Edit ``` package teacher; import entity.Teacher; public class Edit { private int id; // 关健字 private Teacher teacher; // 教师实体 public int getId() { return id; } public void setId(int id) { this.id = id; } // teacher会被V层读取,但并可能由V层传入,所以,只需要get函数. public Teacher getTeacher() { return teacher; } // 该execute方法将被自动调用, 方法的返回类型必须为String public String execute() { return "success"; } } ``` # V层 > 所有的V层文件均建立在WebContent文件夹中 /jsp/teacher/edit.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>教师管理--编辑</title> </head> <body> <form action="update" method="post"> 姓名:<input type="text" name="name" /> <br /> 用户名:<input type="text" name="username"> <br /> 性别:<select name="sex"> <option value="0">男</option> <option value="1">女</option> </select> <br /> 邮箱:<input type="text" name="email" /><br /> 密码:<input type="password" name="password" /><br /> <button type="submit">submit</button> </form> </body> </html> ``` ## 测试 使用如下URL进行测试: [http://localhost:8080/javaee/teacher/edit?id=1](http://localhost:8080/javaee/teacher/edit?id=1) 或: [http://localhost:8080/javaee/teacher/edit?id=1](http://localhost:8080/javaee/teacher/edit?id=1) # M层 我们要编辑一个用户的前提,要是获取这个用户的原始信息.我们在M层中,新建`getTeacherById(int id)`方法。 我们仍然将这个方法写在entity.Teacher这个实体类中 ``` /** * 通过ID获取Teacher实体 * @param id * @return */ static public Teacher getTeacherById(int id) { // 实例化Teacher Teacher teacher = new Teacher(); // 创建会话(这里的session也是会话的意思,我们以前接触的http中的session,处理的是用户与服务器的对话) Session session = MysqlJavaee.getCurrentSession(); // 开启事务(使用缓冲池进行数据库的连接) Transaction transaction = session.beginTransaction(); // 在这里,必须使用try catch finally语句。来确定会话正常关闭. // 否则,当操作数据库产生错误时,你可能需要重启mysql服务 try { // 使用Teacher.class来获取到Teacher的类名(包括包名) teacher = (Teacher) session.get(Teacher.class, id); // 提交事务 transaction.commit(); // 捕获异常 } catch (HibernateException e) { // 如果事务执行异常,则回滚事务 if (null != transaction) { transaction.rollback(); } // 打印异常 e.printStackTrace(); } finally { // 如果session处于开启状态,则关闭session if (session.isOpen()) { // 关闭会话 session.close(); } } return teacher; } ``` ## 测试 M层中的每个方法,都对应一个测试的信息 以后我们进行测试时,进行如下规定: > 每个M层中的方法,都需要在test目录下建立同名包,同名类,同名方法。 比如,我们上面将`getTeacherById(int id)`写在了src目录中的entity.Teacher中。那么,我们在test目录中,也需要建立entity.Teacher同名类,及`getTeacherById()`同名方法。 ``` package entity; import org.junit.Test; public class TestTeacher { // 用注解的方法,来说明此方法是一个可以用来做单元测试的方法 @Test public void testInit() { // 初例化 entity.Teacher teacher = new entity.Teacher(1, "张三", "zhangsan", "zhangsan@yunzhiclub.com", false, "123321"); // 打印对象信息 System.out.println(teacher.toString()); } @Test public void getTeacherById() { int id = 1; Teacher teacher = Teacher.getTeacherById(id); System.out.println(teacher.toString()); // 打印Teacher类的 类名(包括包名) System.out.println(Teacher.class); } } ``` 结果: ``` Teacher [id=1, name=张三, username=zhangsan, email=zhangsan@yunzhiclub.com, sex=true, password=123] class entity.Teacher ``` ## C与M对接 ``` // 该execute方法将被自动调用, 方法的返回类型必须为String public String execute() { // 获取要编辑的教师 teacher = Teacher.getTeacherById(id); System.out.println(teacher.toString()); return "success"; } ``` ## V与C对接 1. 引入struts标签 2. 显示数据 ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!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 action="update" method="post"> <input type="hidden" name="id" value="<s:property value="teacher.id" />" /> 姓名:<input type="text" name="name" value="<s:property value="teacher.name" />"/> <br /> 用户名:<input type="text" name="username" value="<s:property value="teacher.username" />"> <br /> 性别:<select name="sex"> <option value="0">男</option> <option value="1">女</option> </select> <br /> 邮箱:<input type="text" name="email" value="<s:property value="teacher.email" />" /><br /> 密码:<input type="password" name="password" /><br /> <button type="submit">submit</button> </form> </body> </html> ``` ## 测试 [http://localhost:8080/javaee/teacher/edit?id=1](http://localhost:8080/javaee/teacher/edit?id=1) ![编辑](./image/4.4.1.png) ## 判断性别 我们使用在前面应用到的<s:if>标签来进行性别的判断,并选中. ``` <select name="sex"> <option value="0">男</option> <option value="1" <s:if test="teacher.sex">selected</s:if>>女</option> </select> ``` 此时,再刷新网页,如果在数据库中,我们存的性别值为1,则"女"会自动选中。 > 本节参考官方文档:hibernate:[#objectstate-loading) , struts:[if](https://struts.apache.org/docs/if.html)