• struts2--CRUD


       struts的CRUD 

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

    <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>
            
            <dependency>
              <groupId>org.apache.tomcat</groupId>
              <artifactId>tomcat-jsp-api</artifactId>
              <version>8.0.47</version>
            </dependency>

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

      2.1  PageTag

      1 package com.yuan.crud.tag;
      2 
      3 import java.io.IOException;
      4 import java.util.Map;
      5 import java.util.Map.Entry;
      6 import java.util.Set;
      7 
      8 import javax.servlet.jsp.JspException;
      9 import javax.servlet.jsp.JspWriter;
     10 import javax.servlet.jsp.tagext.BodyTagSupport;
     11 
     12 import com.yuan.crud.util.PageBean;
     13 
     14 public class PageTag extends BodyTagSupport {
     15 
     16     /**
     17      * 
     18      */
     19     private static final long serialVersionUID = 1L;
     20 
     21     private PageBean pageBean;
     22 
     23     public PageBean getPageBean() {
     24         return pageBean;
     25     }
     26 
     27     public void setPageBean(PageBean pageBean) {
     28         this.pageBean = pageBean;
     29     }
     30     
     31     @Override
     32     public int doStartTag() throws JspException {
     33         JspWriter out = pageContext.getOut();
     34         try {
     35             out.print(toHTML());
     36         } catch (IOException e) {
     37             // TODO Auto-generated catch block
     38             e.printStackTrace();
     39         }
     40         return super.doStartTag();
     41     }
     42 
     43     private String toHTML() {
     44         StringBuilder sb= new StringBuilder();
     45         
     46         //拼接下一次发送请求所要提交的隐藏的form表单
     47         sb.append("<form id='pageBeanForm' action='"+pageBean.getUrl()+"' method='post'>");
     48         sb.append("<input type='hidden' name='page'>");
     49         
     50         Map<String, String[]> paMap = pageBean.getPaMap();
     51         if(paMap != null && paMap.size()>0) {
     52             Set<Entry<String, String[]>> entrySet = paMap.entrySet();
     53             for (Entry<String, String[]> entry : entrySet) {
     54                 //上一次请求可能携带页码name=page的参数,但是改参数在前面已经单独赋值,
     55                 //因为上一次请求是第一页的数据,下一次可能是第二页,一位这前后请求page对应的值是不一样的,需要单独赋值
     56                 
     57                 if(!"page".equals(entry.getKey())) {
     58                 for(String val:entry.getValue()) {
     59                     sb.append("<input type='hidden' name='"+entry.getKey()+"' value='"+val+"'>");
     60                     
     61                 }
     62               }
     63             }
     64         }
     65         
     66         sb.append("</form>");
     67         
     68         
     69         //拼接分页条
     70         sb.append("<div style='text-align: right; font-size: 12px;'>");
     71         sb.append("每页"+pageBean.getRows()+"条,共"+pageBean.getTotal()+"条,第"+pageBean.getPage()+"页,共"+pageBean.getMaxPage()+"页&nbsp;&nbsp;<a  ");
     72         sb.append(" href='javascript:gotoPage(1)'>首页</a>&nbsp;&nbsp;<a");
     73         sb.append(" href='javascript:gotoPage("+pageBean.getPreviousPage()+")'>上一页</a>&nbsp;&nbsp;<a");
     74         sb.append(" href='javascript:gotoPage("+pageBean.getNexPage()+")'>下一页</a>&nbsp;&nbsp;<a");
     75         sb.append(" href='javascript:gotoPage("+pageBean.getMaxPage()+")'>尾页</a>&nbsp;&nbsp;<input type='text'");
     76         sb.append(" id='skipPage'");
     77         sb.append(" style='text-align: center; font-size: 12px;  50px;'>&nbsp;&nbsp;<a");
     78         sb.append(" href='javascript:skipPage()'>Go</a>");
     79         sb.append("</div>");
     80         //拼接分页所需要的js代码
     81         sb.append("<script type='text/javascript'>");
     82         sb.append(" function gotoPage(page) {");
     83         sb.append(" document.getElementById('pageBeanForm').page.value = page;");
     84         sb.append(" document.getElementById('pageBeanForm').submit();");
     85         sb.append(" }");
     86         sb.append(" function skipPage() {");
     87         sb.append(" var page = document.getElementById('skipPage').value;");
     88         sb.append(" if(!page || isNaN(page) || parseInt(page)<1 || parseInt(page)>"+pageBean.getMaxPage()+"){");
     89         sb.append(" alert('请输入1~N的数字');");
     90         sb.append(" return;");
     91         sb.append(" }");
     92         sb.append(" gotoPage(page);");
     93         sb.append(" }");
     94         sb.append(" </script>");
     95         
     96         return sb.toString();
     97     }
     98     
     99     
    100 }

      2.2  mytag.tld

     1 <!DOCTYPE taglib
     2   PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
     3    "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
     4 <!-- 标签库描述符 -->
     5 <taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
     6     <!-- 代表标签库的版本号 -->
     7     <tlib-version>1.0</tlib-version>
     8     <!-- 代表jsp的版本 -->
     9     <jsp-version>1.2</jsp-version>
    10     <!-- 你的标签库的简称 -->
    11     <short-name>test</short-name>
    12     <!-- 你标签库的引用uri -->
    13     <uri>/zking</uri>
    14 
    15     <!-- 1自定义分页标签 -->
    16     <tag>
    17       <name>Page</name>
    18       <tag-class>com.yuan.crud.tag.PageTag</tag-class>
    19       <body-content>JSP</body-content>
    20       <attribute>
    21          <name>pageBean</name>
    22          <required>true</required>
    23          <rtexprvalue>true</rtexprvalue>
    24       </attribute>
    25     </tag>
    26     
    27            
    28         
    29     
    30 </taglib>

      2.3  web.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.yuan.crud.util.EncodingFiter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>encodingFiter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
      
      <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern>
      </filter-mapping>
    </web-app>

     

    3、dao层去访问数据  Clazz实体类

    3.1  ClazzDao

     1 package com.yuan.crud.dao;
     2 
     3 import java.sql.SQLException;
     4 import java.util.List;
     5 
     6 import com.yuan.crud.entity.Clazz;
     7 import com.yuan.crud.util.BaseDao;
     8 import com.yuan.crud.util.PageBean;
     9 import com.yuan.crud.util.StringUtils;
    10 
    11 public class ClazzDao extends BaseDao<Clazz> {
    12 
    13     public List<Clazz> list(Clazz clazz,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
    14         String sql="select * from t_struts_class where true ";
    15         String cname= clazz.getCname();
    16         int cid=clazz.getCid();
    17         if(cid!=0) {
    18             sql += " and cid="+cid;
    19         }
    20         if(StringUtils.isNotBlank(cname)) {
    21             sql += " and cname like '%"+cname+"%'";
    22         }
    23         return super.executeQuery(sql , Clazz.class, pageBean);
    24     }
    25     
    26     
    27     public int add(Clazz clazz) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, SQLException {
    28         String sql ="insert into t_struts_class values(?,?,?,?)";
    29         return executeUpdate(sql, new String[] {"cid","cname","cteacher","pic"}, clazz);
    30     }
    31     
    32     public int del(Clazz clazz) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, SQLException {
    33         String sql ="delete from t_struts_class where cid=?";
    34         return executeUpdate(sql, new String[] {"cid"}, clazz);
    35     }
    36     
    37     public int edit(Clazz clazz) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, SQLException {
    38         String sql ="update t_struts_class set cname = ?,cteacher=?,pic=? where cid=?";
    39         return executeUpdate(sql, new String[] {"cname","cteacher","pic","cid"}, clazz);
    40     }
    41     
    42     
    43     
    44     
    45 }

      3.2  Clazz

     1 package com.yuan.crud.entity;
     2 
     3 public class Clazz{
     4 
     5     
     6     private int cid;
     7     private String cname;
     8     private String cteacher;
     9     private String pic;
    10     public int getCid() {
    11         return cid;
    12     }
    13     public void setCid(int cid) {
    14         this.cid = cid;
    15     }
    16     public String getCname() {
    17         return cname;
    18     }
    19     public void setCname(String cname) {
    20         this.cname = cname;
    21     }
    22     public String getCteacher() {
    23         return cteacher;
    24     }
    25     public void setCteacher(String cteacher) {
    26         this.cteacher = cteacher;
    27     }
    28     public String getPic() {
    29         return pic;
    30     }
    31     public void setPic(String pic) {
    32         this.pic = pic;
    33     }
    34     @Override
    35     public String toString() {
    36         return "Clazz [cid=" + cid + ", cname=" + cname + ", cteacher=" + cteacher + ", pic=" + pic + "]";
    37     }
    38     
    39     
    40     
    41     
    42 }

    4、web层去调用dao层给前台返回数据  

     4.1  BaseAction

     1 package com.yuan.crud.web;
     2 
     3 import javax.servlet.ServletContext;
     4 import javax.servlet.http.HttpServletRequest;
     5 import javax.servlet.http.HttpServletResponse;
     6 import javax.servlet.http.HttpSession;
     7 
     8 import org.apache.struts2.interceptor.ServletRequestAware;
     9 import org.apache.struts2.interceptor.ServletResponseAware;
    10 
    11 /**
    12  * 每一个开发的子控制器要用的属性都定义在通用的action中。
    13  * @author Administrator
    14  *
    15  */
    16 public class BaseAction implements ServletRequestAware, ServletResponseAware{
    17     /**
    18      * 为了传值使用
    19      */
    20     protected HttpServletResponse response;
    21     protected HttpServletRequest request;
    22     protected HttpSession session;
    23     protected ServletContext application;
    24     
    25     /**
    26      * 为了配置跳转页面所用
    27      */
    28     protected final static String SUCCESS = "success";
    29     protected final static String FAIL = "fail";
    30     protected final static String LIST = "list";
    31     protected final static String ADD = "add";
    32     protected final static String EDIT = "edit";
    33     protected final static String DETAIL = "detail";
    34     
    35     /**
    36      * 具体传值字段    后端向jsp页面传值所用字段
    37      */
    38     protected Object result;
    39     protected Object msg;
    40     protected int code;
    41 
    42     public Object getResult() {
    43         return result;
    44     }
    45 
    46     public Object getMsg() {
    47         return msg;
    48     }
    49 
    50     public int getCode() {
    51         return code;
    52     }
    53 
    54     @Override
    55     public void setServletResponse(HttpServletResponse arg0) {
    56         this.response = arg0;
    57         
    58     }
    59 
    60     @Override
    61     public void setServletRequest(HttpServletRequest arg0) {
    62         this.request = arg0;
    63         this.session = arg0.getSession();
    64         this.application = arg0.getServletContext();
    65     }
    66     
    67 
    68 }

     4.2  ClazzAction

     1 package com.yuan.crud.web;
     2 
     3 import java.sql.SQLException;
     4 import java.util.List;
     5 
     6 import com.opensymphony.xwork2.ModelDriven;
     7 import com.yuan.crud.dao.ClazzDao;
     8 import com.yuan.crud.entity.Clazz;
     9 import com.yuan.crud.util.PageBean;
    10 
    11 public class ClazzAction extends BaseAction implements ModelDriven<Clazz>{
    12 
    13     private Clazz clz = new Clazz();
    14     private ClazzDao clzdao = new ClazzDao();
    15     
    16     /**
    17      * 查询
    18      * @return
    19      */
    20     public String list() {
    21         PageBean pageBean = new PageBean();
    22         pageBean.setRequest(request);
    23         try {
    24             List<Clazz> list = this.clzdao.list(clz, pageBean);
    25             System.out.println(list);
    26             request.setAttribute("clzList", list);
    27             request.setAttribute("pageBean", pageBean);
    28         } catch (InstantiationException | IllegalAccessException | SQLException e) {
    29             // TODO Auto-generated catch block
    30             e.printStackTrace();
    31         }
    32         return "list";
    33     }
    34     
    35     /**
    36      * 跳转编辑页面(新增修改页面)
    37      * @return
    38      */
    39     public String preSave() {
    40         if(clz.getCid()!=0) {
    41             try {
    42                 this.result = this.clzdao.list(clz, null).get(0);
    43             } catch (InstantiationException | IllegalAccessException | SQLException e) {
    44                 // TODO Auto-generated catch block
    45                 e.printStackTrace();
    46             }
    47         }
    48         return "preSave";
    49     }
    50     
    51     public String add() {
    52         try {
    53             this.code = this.clzdao.add(clz);
    54         } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException
    55                 | SQLException e) {
    56             // TODO Auto-generated catch block
    57             e.printStackTrace();
    58         }
    59         return "toList";
    60     }
    61     
    62     public String edit() {
    63         try {
    64             this.clzdao.edit(clz);
    65         } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException
    66                 | SQLException e) {
    67             // TODO Auto-generated catch block
    68             e.printStackTrace();
    69         }
    70         return "toList";
    71     }
    72     
    73     public String del() {
    74         try {
    75             this.clzdao.del(clz);
    76         } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException
    77                 | SQLException e) {
    78             // TODO Auto-generated catch block
    79             e.printStackTrace();
    80         }
    81         return "toList";
    82     }
    83     
    84     
    85     @Override
    86     public Clazz getModel() {
    87         
    88         return clz;
    89     }
    90     
    91 }

    5、在struts_sy.xml进行配置

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
     4     "http://struts.apache.org/dtds/struts-2.5.dtd">
     5 <struts>
     6     <package name="sy" extends="base" namespace="/sy">
     7       
    8
    9
    10 11 12 <action name="/clz_*" class="com.yuan.crud.web.ClazzAction" method="{1}"> 13 <result name="list">/clzList.jsp</result> 14 <result name="preSave">/clzEdit.jsp</result> 15 <result name="toList" type="redirectAction">clz_list</result> 16 </action> 17 </package> 18 </struts>

      6、写jsp

      6.1  clzList.jsp

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3     <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
     4  <%@taglib prefix="z" uri="/****"%>
     5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     6 <html>
     7 <head>
     8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     9 <title>Insert title here</title>
    10 </head>
    11 <body>
    12 <form action="${pageContext.request.contextPath }/sy/clz_list.action" method="post">
    13 
    14  班级名: <input type="text" name="cname" /><input type="submit" value="确定"/>
    15  
    16 </form>
    17 <a href="${pageContext.request.contextPath }/sy/clz_preSave.action">新增</a>
    18 <table border="1" width="100%">
    19    <tr>
    20        <td>编号</td>
    21        <td>班级名</td>
    22        <td>教员</td>
    23        <td>图片</td>
    24        <td>操作</td>
    25    </tr>
    26    
    27    <c:forEach items="${clzList }" var="c">
    28      <tr>
    29        <td>${c.cid }</td>
    30        <td>${c.cname }</td>
    31        <td>${c.cteacher }</td>
    32        <td>${c.pic }</td>
    33        
    34           
    35
    36 <td> 37 <a href="${pageContext.request.contextPath }/sy/clz_preSave.action?cid=${c.cid}">修改</a>&nbsp;&nbsp;&nbsp; 38 <a href="${pageContext.request.contextPath }/sy/clz_del.action?cid=${c.cid}">删除</a>&nbsp;&nbsp;&nbsp; 39 <a href="${pageContext.request.contextPath }/sy/clz_preUpload.action?cid=${c.cid}">图片上传</a>&nbsp;&nbsp;&nbsp; 40 </td> 41 </tr> 42 </c:forEach> 43 </table> 44 <z:Page pageBean="${pageBean }"></z:Page> 45 </body> 46 </html>

      6.2  clzEdit.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>Insert title here</title>
    </head>
    <body>
    <form action="${pageContext.request.contextPath }${result.cname == null ? '/sy/clz_add.action' : '/sy/clz_edit.action'}" method="post">
     cid:<input type="text" name="cid" value="${result.cid }"/>
     cname:<input type="text" name="cname" value="${result.cname }"/> 
     cteacher:<input type="text" name="cteacher" value="${result.cteacher }"/>
     
    <input type="submit"/>
    </form>
    </body>
    </html>

    7.页面显示

    7.1首页

    7.2 新增

    7.3 修改

       显示

     

  • 相关阅读:
    Struts2拦截器
    struts2介绍
    java读写文件大全
    Intent的详细解析以及用法
    sigmoid和softmax的应用意义区别
    C 实现 创建多个txt文件,并以自然数列命名,然后将产生的十进制数据写入txt文档
    k-means原理和python代码实现
    非极大值抑制 NMS
    JetSonNano darknet yolov3工程通过CMakeLists.txt配置编译环境
    C文件 CMakeList.txt编译器配置错误的问题 error:invalid conversion from 'int' to 'LAYER_TYPE' [-fpermissive]....
  • 原文地址:https://www.cnblogs.com/ly-0919/p/11261735.html
Copyright © 2020-2023  润新知