Struts2的CRUD

Posted liuwenwu9527

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; width: 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>

成果:

技术图片

以上是关于Struts2的CRUD的主要内容,如果未能解决你的问题,请参考以下文章

Struts2标签库

Struts2框架使用之struts2的验证框架

Struts2学习笔记

Struts2学习笔记

struts2系列:struts2参数传递错误struts2的输入错误验证

详谈Struts2