zoukankan      html  css  js  c++  java
  • Struts2 综合案例

    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

     

  • 相关阅读:
    九度 1502:最大值最小化(二分法)
    九度 1499:项目安排(任务调度, 01背包变形)
    九度 1498:寻找表达式(暴力搜索, 计算表达式)
    正则——只能允许是汉字、拼音和数字的正则表达式
    vs出现“已经在解决方案中打开了具有该名称的项目”问题的解决方案
    DNS劫持解决方法
    Unity3D 面试题汇总
    MonoDevelop几个常用的快捷键
    《要死就一定要死在你手里》——虐心歌曲
    美国队长2-冬日战士
  • 原文地址:https://www.cnblogs.com/bravolove/p/5828126.html
Copyright © 2011-2022 走看看