美文网首页SpringBoot精选Java学习笔记Spring Boot
Struts2 crud功能实现+高级查询+分页查询

Struts2 crud功能实现+高级查询+分页查询

作者: CoderZS | 来源:发表于2017-07-02 01:36 被阅读376次

    后台功能的实现:

    1.创建员工表:t_employee
    2.根据表结构创建实体类:Employee
    3.定义DAO接口:IEmployeeDAO
    4.定义DAO的实现类:EmployeeDAOImpl(暂不实现, 测试先行)
    5.定义对应的测试类:EmployeeDAOTest(编写对每个dao方法的测试代码)
    6:使用druid连接池抽取JdbcUtil和db.properties文件.
    7:编写通用的DAO操作模板JdbcTemplate.
    8:编写通用的结果集处理器:BeanHander/BeanListHandler.

    前台功能的实现:

    01.集成Struts2框架
    02.编写EmployeeAction代码和JSP代码
    03.网页基本的CRUD测试通过
    04.完成高级查询操作(前台)
    05.完成分页查询操作(前台)

    高级查询+分页查询

    1.查询对象的封装(EmployeeQueryObject,QueryObject)
    该对象是用户提交的数据的封装,将高级查询和分页数据都封装到该对象中,方便数据的传递
    在该对象中提供sql条件字符串的拼接,和sql参数的存放
    2.分页结果对象的封装(PageResult)
    该对象是对页面中需要显示数据的封装(结果集数据和分页条相关的数据)
    3.高级查询+分页查询方法设计
    思考用户需要什么数据(返回值的类型)和用户应该要提供什么数据(方法的参数列表的定义)

    项目结构划分


    DAO暂时不进行叙述了我们把重点放在Struts2上

    我们想对下面表格使用struts2进行CRUD+高级查询+分页查询

    先把struts2引入项目中

    <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>
    
    • 首先我们创建一个Action类

      public class EmployeeAction extends ActionSupport {
      private static final long serialVersionUID = 1L;
      private IEmployeeDAO dao = new EmployeeDAOImp();
      @Setter@Getter
      private Employee e;
      @Setter@Getter
      private EmployeeQueryObject qo =new EmployeeQueryObject();
       @Override
       public String execute() throws Exception {
       PageResult result = dao.pageQuery(qo);
       ActionContext.getContext().put("result", result);
      //跳转逻辑视图
       return "list";
       }
       //执行用户的删除操作
       public String delete(){
       dao.delete(e.getId());
       return SUCCESS;
       }
       //编辑页面的跳转操作
       public String input(){
       if(e!=null){
           e=dao.get(e.getId());
       }
       return "input";
       }
      //执行保存更新操作
       public String saveOrUpdate(){
       if(e.getId()!=null){
           dao.update(e);
       }else{
           dao.save(e);
       }
       return SUCCESS;
       }
       }
      

    domain模型

    struts.xml

    <struts>
    <!--开发者模式 -->
    <constant name="struts.devMode" value="true"></constant>
    <constant name="struts.ui.theme" value="simple" />
    <package name="empPkg" extends="struts-default" namespace="/">
        <action name="emp_*" class="com.jd.pss.web.action.EmployeeAction"
            method="{1}">
            <result name="list" type="dispatcher">
                /WEB-INF/views/employee/list.jsp
            </result>
            <result name="success" type="redirectAction">
                emp
            </result>
            <result name="input">
                /WEB-INF/views/employee/input.jsp
            </result>
        </action>
    </package>
    </struts>
    

    list.jsp

    <s:form class="form-inline" role="form">
                <s:hidden name="qo.currentPage" id="currentPage"></s:hidden>
                <div class="form-group">
                    <label class="sr-only" for="exampleInputEmail2"></label>
                    <s:textfield name="qo.username" class="form-control"
                        id="exampleInputEmail2" placeholder="姓名" />
                </div>
                <div class="form-group">
                    <label class="sr-only" for="exampleInputEmail2"></label>
                    <s:textfield name="qo.email" class="form-control"
                        id="exampleInputEmail2" placeholder="邮箱" />
                </div>
    

    input.jsp

    <s:form id="account_register" name="account_register" namespace="/"
                        action="emp_saveOrUpdate" class="form-horizontal">
    
                        <s:hidden name="e.id"></s:hidden>
    
                        <div class="form-group">
                            <label for="account_register_account_username"
                                class="col-sm-2 control-label">用户名</label>
                            <div class="col-sm-4">
                                <s:textfield name="e.username"
                                    id="account_register_account_username" class="form-control"
                                    placeholder="请输入用户名" />
                            </div>
                            <div class="col-sm-6"></div>
                        </div>
                        <div class="form-group">
                            <label for="account.password" class="col-sm-2 control-label">密码</label>
                            <div class="col-sm-4">
                                <s:password name="e.password" showPassword="true"
                                    id="account_register_account_password" class="form-control"
                                    placeholder="请输入密码" />
                            </div>
    

    我们需要理解的是以下逻辑:

    • http://localhost:8080/emp发送请求时获取查询数据存储在值栈中,跳转到逻辑视图 在list.jsp中通过迭代获取所有数据显示到界面上

        <s:iterator value="#result.listData" var="emp">
                        <tr>
                            <td>
                                <s:property value="#emp.id" />
                            </td>
                            <td>
                                <s:property value="#emp.headImg" />
                            </td>
                            <td>
                                <s:property value="#emp.username" />
                            </td>
                            <td>
                                <s:property value="#emp.password" />
                            </td>
                            <td>
                                <s:property value="#emp.email" />
                            </td>
                            <td>
                                <s:date format="yyyy-MM-dd" name="#emp.hiredate" />
                            </td>
                            <td>
                                <s:property value="#emp.salary" />
                            </td>
                            <td>
                                <s:a namespace="/" action="emp_input">
                                    <s:param name="e.id" value="#emp.id"></s:param>
                                编辑</s:a>
                                |
                                <s:a namespace="/" action="emp_delete">
                                    <s:param name="e.id" value="#emp.id"></s:param>
                            删除</s:a>
                            </td>
                        </tr>
                    </s:iterator>
      

    这就是我们需要现实的界面前提是DAO的crud正常

    • 删除操作:先获取要删除的数据的id值 通过getter方法拿到对象e并且调用对象属性的setter方法将id值赋值给对象的id属性 再调用delete()方法把id传递进来调用dao的删除方法从数据库删除数据,返回SUCCESS跳转到主见面进行重新发送请求进行更新数据
    第一步
    第二步 第三步 第四部 第五步 第六步 第七步
    • 添加操作:当点击注册时会调用input()方法这时id为空返回"input"进入input的罗技视图界面通过struts.xml配置文件进入input.jsp(username为例)这时通过getter方法找到e对象再调用e属性username的setter方法将表格数据赋值;此时e对象的属性就有值了,提交表单后执行saveOrUpdate()方法,此时会调用dao的save()方法把对象保存


      第一步
    第二步

    到action类中找到对应的input()方法

    第三步 第四步

    跳转到input.jsp界面

    第五步
    e.id做了那些事?这是我们必须要知道的
    提交表单会操作action 第六步 第七步 第八步 第九步

    更新数据请求转发跳转到list.jsp界面

    • 编辑操作:当点击编辑操作时会获取对象的id,通过getter方法获取对象,再通过对象属性的setter方法将表格的值赋值给对象的属性 然后调用input()方法,因为id有值.再调用dao的update()方法
    第一步 第二步 第三步 第四部 第五步 第六步

    最后更新数据请求转发跳转到list.jsp界面

    第七步
    • 高级查询:查询请求发送时会调用getter方法拿到qo对象,再将请求的值通过setter方法赋值给qo对象的属性.封装成对象
      同时在表单中设置一个隐藏域currentPage属性,提交表单跳转到当前界面执行execute()方法, 通过dao.pageQuery(qo); 获取结果集,将结果集保存到值栈中,跳转到"list"的逻辑视图


    查询结果

    查询结果

    常见的type值(结果类型):
    dispatcher: 表示从Action请求转发到页面(JSP).缺省值
    redirect: 表示从Action重定向到页面(JSP).
    chain: 表示从Action请求转发到另一个Action.
    redirectAction: 表示从Action重定向到另一个Action.

    相关文章

      网友评论

        本文标题:Struts2 crud功能实现+高级查询+分页查询

        本文链接:https://www.haomeiwen.com/subject/bexncxtx.html