1.总结: 1 ModelDriven 来封装前台数据, 通过struts2的参数拦截器,封装到action中的成员变量中,在写方法中,千万不要写参数否则会报找不到save,update等方法的错误,我找了近近一个小时才找到!
action:
public class EmployeeAction extends ActionSupport implements ModelDriven<Employee>{ private IEmployeeService employeeService = new EmployeeService(); /*****封装数据**************/ private Employee emp = new Employee(); public void setEmp(Employee emp) { this.emp = emp; } public Employee getEmp() { return emp; } public Employee getModel() { return emp; } public String save(){//不能加参数 save(Employee emp) try { //1.调用service employeeService.save(emp); //2.跳转页面 return list(); } catch (Exception e) { e.printStackTrace(); return ERROR; } } public String list(){ try { //1.去db中拿所有的员工数据 List<Employee> lists = employeeService.getAll(); //2.存入域对象中传到前台去 request域 ActionContext.getContext().getContextMap().put("lists", lists); return "list"; } catch (Exception e) { e.printStackTrace(); return ERROR; } } //记住千万不能这样写, public String update(Employee emp){...},否则会报找不到这个方法的错误!参数是前台传过的来的,直接封装到了成员变量中了, public String update(){ try { employeeService.update(emp); return list(); } catch (Exception e) { e.printStackTrace(); return ERROR; } } public String edit(){ try{ //1.获取当前修改的记录的主键值 int id =emp.getId(); //2.调用service查询 Employee emp = employeeService.findById(id); //3. 数据回显 通过值栈 ValueStack vs = ActionContext.getContext().getValueStack(); vs.pop(); vs.push(emp); return "update"; }catch (Exception e) { e.printStackTrace(); return ERROR; } } }
2.serviceimpl 省略接口
public class EmployeeService implements IEmployeeService { IEmployeeDao employeeDao = new EmployeeDao(); public List<Employee> getAll() { return employeeDao.getAll(); } public Employee findById(int id) { return employeeDao.findById(id); } public void save(Employee emp) { employeeDao.save(emp); } public void update(Employee emp) { employeeDao.update(emp); } public IEmployeeDao getEmployeeDao() { return employeeDao; } public void setEmployeeDao(IEmployeeDao employeeDao) { this.employeeDao = employeeDao; } }
3.daoimpl 省略接口
public class EmployeeDao implements IEmployeeDao { public List<Employee> getAll() { String sql = "select * from employees"; try { return JDBCUtils.getQueryRunner().query(sql, new BeanListHandler<Employee>(Employee.class)); } catch (Exception e) { throw new RuntimeException(e); } } public Employee findById(int id) { String sql = "select * from employees where id = ?"; try { return JDBCUtils.getQueryRunner().query(sql, new BeanHandler<Employee>(Employee.class),id); } catch (Exception e) { throw new RuntimeException(e); } } public void save(Employee emp) { String sql = "insert into employees (empName,workDate) values (?,?)"; try { JDBCUtils.getQueryRunner().update(sql, emp.getEmpName(),emp.getWorkDate()); } catch (SQLException e) { throw new RuntimeException(e); } } public void update(Employee emp) { String sql = "update employees set empName=?,workDate=? where id=? "; try { JDBCUtils.getQueryRunner().update(sql, emp.getEmpName(),emp.getWorkDate(),emp.getId()); } catch (SQLException e) { throw new RuntimeException(e); } } }
4.数据库连接:
public class JDBCUtils { //1.初始化连接池 private static DataSource dataSource; static{ dataSource = new ComboPooledDataSource(); } public static DataSource getDataSource() { return dataSource; } //2.创建一个DBUtils常用工具类对象 public static QueryRunner getQueryRunner(){ return new QueryRunner(dataSource); } }
5. entity 省略setter/getter 方法
public class Employee { private int id; private String empName; private Date workDate; }
二:1.web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
2.struts.xml 奇怪为什么package的name一去就报错!!!为什么不是写包名? s:token 防止request的重复提交一共三步,用session一步搞定!
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.ui.theme" value="simple"></constant> <package name="emp" extends="struts-default"> <global-results> <result name="error">/error/error.jsp</result> </global-results> <action name="emp_*" class="cn.itcast.action.EmployeeAction" method="{1}"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="token"> <param name="includeMethods">save</param> </interceptor-ref> <result name="invalid.token" type="redirectAction">emp_list</result> <result name="list">/WEB-INF/list.jsp</result> <result name="update">/WEB-INF/update.jsp</result> </action> </package> </struts>
3.c3p0-config.xml
<c3p0-config> <default-config> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql:///hib_demo</property> <property name="user">root</property> <property name="password">root</property> <property name="initialPoolSize">5</property> <property name="maxPoolSize">10</property> </default-config> <named-config name="oracleConfig"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql:///day17</property> <property name="user">root</property> <property name="password">root</property> <property name="initialPoolSize">5</property> <property name="maxPoolSize">10</property> </named-config> </c3p0-config>
三:
1.add.jsp
<s:form action="/emp_save" method="post"> <s:token></s:token> <table> <tr> <td>员工 </td> <td><s:textfield name="empName"/></td> </tr> <tr> <td>入职时间 </td> <td><s:textfield name="workDate"/></td> </tr> <tr> <td colspan="2"><s:submit value="保存员工"></s:submit></td> </tr> </table> </s:form>
2.list.jsp
<body> <table border="1" align="center"> <tr> <th>序号</th> <th>编号</th> <th>员工名</th> <th>入职时间</th> <th>操作</th> </tr> <!-- 先判断后迭代 --> <s:if test="#request.lists !=null"> <s:iterator var="emp" value="#request.lists" status="st"> <tr> <td><s:property value="#st.count"/></td> <td><s:property value="#emp.id"/></td> <td><s:property value="#emp.empName"/></td> <td><s:property value="#emp.workDate"/></td> <td> <s:a href="emp_edit?id=%{#emp.id}">修改</s:a> </td> </tr> </s:iterator> </s:if> <s:else> <tr><td colspan="5">sorry,没有你要的数据</td></tr> </s:else> </table> </body>
3.update.jsp
<s:form action="/emp_update" method="post"> <s:hidden name="id"></s:hidden> <table> <tr> <td>员工 </td> <td><s:textfield name="empName"/></td> </tr> <tr> <td>入职时间 </td> <td><s:textfield name="workDate"/></td> </tr> <tr> <td colspan="2"><s:submit value="修改员工"/></td> </tr> </table> </s:form>
四:效果图
1.add.jsp
2. list.jsp
3.edit.jsp
4.update.jsp-->list.jsp
时间: 2024-11-05 11:55:31