• struts2的CRUD


    利用struts2完成增删改查

      1、导入相关的pom依赖(struts、自定义标签库的依赖)

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.lww</groupId>
      <artifactId>T224_struts</artifactId>
      <packaging>war</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>T224_struts Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <dependencies>
         <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <scope>test</scope>
        </dependency>
        
        <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>4.0.1</version>
                <scope>provided</scope>
        </dependency>
        
         <dependency>
                <groupId>org.apache.struts</groupId>
                <artifactId>struts2-core</artifactId>
                <version>2.5.13</version>
         </dependency>
         
         <!-- 5.3、jstl、standard -->
            <dependency>
                <groupId>jstl</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
            <dependency>
                <groupId>taglibs</groupId>
                <artifactId>standard</artifactId>
                <version>1.1.2</version>
            </dependency>
    
            <!-- 5.4、tomcat-jsp-api -->
            <dependency>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-jsp-api</artifactId>
                <version>8.0.47</version>
            </dependency>
            
            <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
                <version>5.1.40</version>
        </dependency>
    
      </dependencies>
      <build>
        <finalName>T224_struts</finalName>
        <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.7.0</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
        </plugins>
      </build>
    </project>

     2、分页的tag类导入、z.tld、完成web.xml的配置

    PageTag 通用分页

    package com.liuwenwu.crud.tag;
    
    import java.io.IOException;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.JspWriter;
    import javax.servlet.jsp.tagext.BodyTagSupport;
    
    import com.liuwenwu.crud.util.PageBean;
    
    public class PageTag extends BodyTagSupport {
    
        private static final long serialVersionUID = 1L;
        private PageBean pageBean;
        public PageBean getPageBean() {
            return pageBean;
        }
        public void setPageBean(PageBean pageBean) {
            this.pageBean = pageBean;
        }
        @Override
        public int doStartTag() throws JspException {
            JspWriter out = pageContext.getOut();
            try {
                out.print(toHTML());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return super.doStartTag();
        }
        private String toHTML() {
            StringBuffer sb = new StringBuffer();
            /*
             * 拼接向后台提交数据的form表单
             *     注意:拼接的form表单中的page参数是变化的,所以不需要保留上一次请求的值
             */
            sb.append("<form id='pageBeanForm' action='"+pageBean.getUrl()+"' method='post'>");
            sb.append("<input type='hidden' name='page'>");
            Map<String, String[]> parameterMap = pageBean.getParameterMap();
            if(parameterMap != null && parameterMap.size() > 0) {
                Set<Entry<String, String[]>> entrySet = parameterMap.entrySet();
                for (Entry<String, String[]> entry : entrySet) {
                    if(!"page".equals(entry.getKey())) {
                        String[] values = entry.getValue();
                        for (String val : values) {
                            sb.append("<input type='hidden' name='"+entry.getKey()+"' value='"+val+"'>");
                        }
                    }
                }
            }
            sb.append("</form>");
            
            /*
             * 展示的分页条
             */
            sb.append("<div style='text-align: right; font-size: 12px;'>");
            sb.append("每页"+pageBean.getRows()+"条,共"+pageBean.getTotal()+"条,第"+pageBean.getPage()+"页,共"+pageBean.getMaxPage()+"页&nbsp;&nbsp;<a href='javascript:gotoPage(1)'>首页</a>&nbsp;&nbsp;<a");
            sb.append(" href='javascript:gotoPage("+pageBean.previousPage()+")'>上一页</a>&nbsp;&nbsp;<a");
            sb.append(" href='javascript:gotoPage("+pageBean.nextPage()+")'>下一页</a>&nbsp;&nbsp;<a");
            sb.append(" href='javascript:gotoPage("+pageBean.getMaxPage()+")'>尾页</a>&nbsp;&nbsp;<input type='text'");
            sb.append(" id='skipPage'");
            sb.append(" style='text-align: center; font-size: 12px;  50px;'>&nbsp;&nbsp;<a");
            sb.append(" href='javascript:skipPage()'>Go</a>");
            sb.append("</div>");
            
            /*
             * 给分页条添加与后台交互的js代码
             */
            sb.append("<script type='text/javascript'>");
            sb.append("        function gotoPage(page) {");
            sb.append("            document.getElementById('pageBeanForm').page.value = page;");
            sb.append("            document.getElementById('pageBeanForm').submit();");
            sb.append("        }");
            sb.append("        function skipPage() {");
            sb.append("            var page = document.getElementById('skipPage').value;");
            sb.append("            if(!page || isNaN(page) || parseInt(page)<1 || parseInt(page)>"+pageBean.getMaxPage()+"){");
            sb.append("                alert('请输入1~N的数字');");
            sb.append("                return;");
            sb.append("            }");
            sb.append("            gotoPage(page);");
            sb.append("        }");
            sb.append("</script>");
            return sb.toString();
        }
    }

    z.tld自定义标签配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
        version="2.0">
        
      <description>zking 1.1 core library</description>
      <display-name>zking core</display-name>
      <tlib-version>1.1</tlib-version>
      <short-name>z</short-name>
      <uri>/zking</uri>
    
     <tag>
         <!-- 标签库中的标签名 -->
        <name>page</name>
        <!-- 标签对应的助手类的全路径名 -->
        <tag-class>com.liuwenwu.crud.tag.PageTag</tag-class>
        <body-content>JSP</body-content>
        <attribute>
                <!-- 属性名 -->
            <name>pageBean</name>
            <!-- 属性值是否是必填 -->
            <required>true</required>
            <!-- 是否支持表达式 -->
            <rtexprvalue>true</rtexprvalue>
        </attribute>
      </tag>
    </taglib>

    wed.xml配置

    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
      <display-name>Archetype Created Web Application</display-name>
        <filter>
          <filter-name>encodingFiter</filter-name>
          <filter-class>com.liuwenwu.crud.util.EncodingFiter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>encodingFiter</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
      
          <filter>
              <filter-name>struts</filter-name>
              <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
          </filter>
          <filter-mapping>
              <filter-name>struts</filter-name>
              <url-pattern>*.action</url-pattern>
          </filter-mapping>
    </web-app>

    3、编写dao层去访问数据

    package com.liuwenwu.crud.dao;
    import java.sql.SQLException;
    import java.util.List;
    
    import org.apache.commons.lang3.StringUtils;
    
    import com.liuwenwu.crud.entity.Clazz;
    import com.liuwenwu.crud.util.EntityBaseDao;
    import com.liuwenwu.crud.util.PageBean;
    
    
    public class ClazzDao extends EntityBaseDao<Clazz>{
    
        /**
         * 查询分页,查询单条数据公用方法
         * @param clz
         * @param pageBean
         * @return
         * @throws InstantiationException
         * @throws IllegalAccessException
         * @throws SQLException
         */
        public List<Clazz> list(Clazz clz,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
            String sql="select * from t_struts_class where true ";
            String cname=clz.getCname();
            int cid=clz.getCid();
            if(cid!=0) {
                sql+=" and cid="+cid;
            }
            if(StringUtils.isNoneBlank(cname)) {
                sql+=" and cname like '%"+cname+"%'";
            }
            return super.executeQuery(sql, pageBean, Clazz.class);
            
        }
        
        /**
         * 新增方法
         * @param clz
         * @return
         * @throws NoSuchFieldException
         * @throws SecurityException
         * @throws IllegalArgumentException
         * @throws IllegalAccessException
         * @throws SQLException
         */
        public int add(Clazz clz) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException {
            String sql="insert into t_struts_class values(?,?,?,?)";
            return super.executeUpdate(sql, new String[] {"cid","cname","cteacher","pic"}, clz);
            
        }
        
        /**
         * 修改方法
         * @param clz
         * @return
         * @throws NoSuchFieldException
         * @throws SecurityException
         * @throws IllegalArgumentException
         * @throws IllegalAccessException
         * @throws SQLException
         */
        public int edit(Clazz clz) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException {
            String sql="update t_struts_class set cname=?,cteacher=?,pic=? where cid=?";
            return super.executeUpdate(sql, new String[] {"cname","cteacher","pic","cid"}, clz);
            
        }
        /**
         * 删除方法
         * @param clz
         * @return
         * @throws NoSuchFieldException
         * @throws SecurityException
         * @throws IllegalArgumentException
         * @throws IllegalAccessException
         * @throws SQLException
         */
        public int del(Clazz clz) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException {
            String sql="delete from t_struts_class where cid=?";
            return super.executeUpdate(sql, new String[] {"cid"}, clz);
            
        }
    }

    4.编写web去调用dao层给前台返回数据

    package com.liuwenwu.crud.web;
    
    import java.sql.SQLException;
    import java.util.List;
    
    import com.liuwenwu.crud.dao.ClazzDao;
    import com.liuwenwu.crud.entity.Clazz;
    import com.liuwenwu.crud.util.PageBean;
    import com.opensymphony.xwork2.ModelDriven;
    
    public class ClazzAction extends BaseAction implements ModelDriven<Clazz>{
        
        private ClazzDao clzDao=new ClazzDao();
        private Clazz clz=new Clazz();
        
        public String list() {
            PageBean pageBean=new PageBean();
            pageBean.setRequest(request);
            try {
                List<Clazz> list= this.clzDao.list(clz, pageBean);
    //            this.result=this.clzDao.list(clz, pageBean);
                request.setAttribute("clzList", list);
                request.setAttribute("pageBean", pageBean);
            } catch (Exception e) {
                e.printStackTrace();
            } 
            return "list";
        }
    
        /**
         * 跳转新增修改页面的公用方法
         * @return
         */
        public String preSave() {
            if(clz.getCid()!=0) {
                try {
                    Clazz c = this.clzDao.list(clz, null).get(0);
                    request.setAttribute("clz", c);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return "preSave";
        }
        /**
         * 新增
         * @return
         */
        public String add() {
            try {
                result=this.clzDao.add(clz);
            } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException
                    | SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return "toList";
        }
        /**
         * 修改
         * @return
         */
        public String edit() {
            try {
                this.clzDao.edit(clz);
            } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException
                    | SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return "toList";
        }
        /**
         * 删除
         * @return
         */
        public String del() {
            try {
                this.clzDao.del(clz);
            } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException
                    | SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return "toList";
        }
        
        
        @Override
        public Clazz getModel() {
            // TODO Auto-generated method stub
            return clz;
        }
        
    }

    5、在struts_sy.xml进行配置

      <action name="/clz_*" class="com.liuwenwu.crud.web.ClazzAction" method="{1}">
                <result name="list">/clzList.jsp</result>
                <result name="preSave">/clzEdit.jsp</result>
                <result name="toList" type="redirectAction">/clz_list</result>
            </action>

    6、前端jsp展示页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
        <%@taglib prefix="z" uri="/zking" %>
    <!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>Insert title here</title>
    </head>
    <body>
    <h2>班级</h2><br>
        <form action="${pageContext.request.contextPath }/sy/clz_list.action" method="post">
            班级名:<input type="text" name="cname">
                  <input type="submit" value="确定">
        </form>
        <a href="${pageContext.request.contextPath }/sy/clz_preSave.action">新增</a>
        <table border="1" width="100%">
            <tr>
                <td>编号</td>
                <td>班级名</td>
                <td>教员</td>
                <td>图片</td>
                <td>操作</td>
            </tr>    
            <c:forEach items="${clzList }" var="c">
            <tr>
                <td>${c.cid }</td>
                <td>${c.cname }</td>
                <td>${c.cteacher}</td>
                <td>${c.pic }</td>
                <td>
                    <a href="${pageContext.request.contextPath }/sy/clz_preSave.action?cid=${c.cid}">修改</a>&nbsp;&nbsp;
                    <a href="${pageContext.request.contextPath }/sy/clz_del.action?cid=${c.cid}">删除</a>&nbsp;&nbsp;
                    <a href="${pageContext.request.contextPath }/sy/clz_preUpload.action?cid=${c.cid}">图片上传</a>&nbsp;&nbsp;
                </td>
            </tr>    
            </c:forEach>
        </table>
        <z:page pageBean="${pageBean }"></z:page>
        
    </body>
    </html>

    成果:

  • 相关阅读:
    9.11 eventbus
    9.10,,,实现new instanceof apply call 高阶函数,偏函数,柯里化
    9.9 promise实现 写完了传到gitee上面了,这里这个不完整
    9.5cors配置代码
    9.5 jsonp 实现
    9.5 http tcp https总结
    9.3 es6 class一部分 and es5 class 发布订阅
    8.30 cookie session token jwt
    8.30vue响应式原理
    warning: LF will be replaced by CRLF in renard-wx/project.config.json. The file will have its original line endings in your working directory
  • 原文地址:https://www.cnblogs.com/xiatian3452/p/11253557.html
Copyright © 2020-2023  润新知