Struts CRUD

1, into the associated dependent pom (Struts, custom tag library dependencies)

<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 classes into the tab, z.tld, complete configuration web.xml

pagetag

package com.zl.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.zl.util.PageBean;


public class PageTag extends BodyTagSupport {

    private static final long serialVersionUID = -553969530960334073L;

    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() {
        // TODO Auto-generated method stub
        StringBuilder sb=new StringBuilder();
        //拼接下一次发送请求所要提交得隐藏得form表单
        sb.append(" <form id='pageBeanForm' action='"+pageBean.getUrl()+"' method='post'> ");
        sb.append(" <input type='hidden' name='page'> ");
        Map <String, String []> = PAMAP pageBean.getPaMap ();
        IF (PAMAP = null && paMap.size ()> 0!) { 
            the Set <the Entry <String, String [] = paMap.entrySet the entrySet >> (); 
            for (the Entry <String, String []> entry: the entrySet) { 
                // the last time the request was likely to carry page namepage parameters, but change parameters on the front and a separate assignment 
                // Why assignment alone? Because a request to obtain data on the first page, the next time around when the second page, page corresponding to the request before and after this value is not available, the need for a separate assignment 
                if (! "Page" .equals ( entry.getKey ())) { 
// <INPUT type = 'hidden' name = 'Hobby' value = '. 1'> 
// <INPUT type = 'hidden' name = 'Hobby' value = '2'> 
                    // [1,2] 
                    for (String Val: entry.getValue ()) { 
                        sb.append ( "<INPUT type = '
                }
            }
        }

        sb.append(" </form>");
        //拼接分页条
        sb.append(" <div style='text-align: right; font-size: 12px;'> ");
        sb.append(" 每页"+pageBean.getRows()+"条,共"+pageBean.getTotal()+"条,第"+pageBean.getPage()+"页,共"+pageBean.getMaxPage()+"页  <a ");
        sb.append(" href='javascript:gotoPage(1)'>首页</a>  <a");
        sb.append(" href='javascript:gotoPage("+pageBean.getpreviousPage()+")'>上一页</a>  <a");
        sb.append(" href='javascript:gotoPage("+pageBean.getNextPage()+")'>下一页</a>  <a");
        sb.append(" href='javascript:gotoPage("+pageBean.getMaxPage()+")'>尾页</a>  <input type='text'");
        sb.append(" id='skipPage'");
        sb.append(" style='text-align: center; font-size: 12px; width: 50px;'>  <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 ( 'Enter number 1 ~ N'); "); 
        sb.append ("} ");
        sb.append (" return; ");
        sb.append(" gotoPage(page);");
        sb.append(" }");
        sb.append(" </script>");
    
        
        return sb.toString();
    }


}

  

z.tld

<Tag> 
    <- tag tag library! (similar to c: set c: out is defined) -> 
    <name> Page </ name> 
    ! <- run specific code is a label, is a helper class, fill in the following the full path name of helper classes -> 
    <tag-class> com.zl.tag.PageTag </ tag-class> 
    <Content-body> the JSP </ Content-body> 
    <attribute> 
    <-! the tag attributes -> 
        <name> pageBean </ name> 
        <-! this property is required -> 
        <required> to true </ required> 
        <-! expression support -> 
        <rtexprvalue> to true </ the rtexprvalue> 
    </ attribute> 
  </ Tag>

  

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.zl.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 layer to access data

 Entity class

package com.zl.entity;

public class Clazz {

    private int cid;
    private String cname;
    private String cteacher;
    private String pic="图片暂定";
    public int getCid() {
        return cid;
    }
    public void setCid(int cid) {
        this.cid = cid;
    }
    public String getCname() {
        return cname;
    }
    public void setCname(String cname) {
        this.cname = cname;
    }
    public String getCteacher() {
        return cteacher;
    }
    public void setCteacher(String cteacher) {
        this.cteacher = cteacher;
    }
    public String getPic() {
        return pic;
    }
    public void setPic(String pic) {
        this.pic = pic;
    }
    @Override
    public String toString() {
        return "Clazz [cid=" + cid + ", cname=" + cname + ", cteacher=" + cteacher + ", pic=" + pic + "]";
    }
    
}

  

 clazzdao

package com.zl.dao;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.lang3.StringUtils;

import com.zl.entity.Clazz;
import com.zl.util.BaseDao;
import com.zl.util.PageBean;

public class ClazzDao extends BaseDao<Clazz> {

    public List<Clazz> list(Clazz clazz,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
        String sql="select * from t_struts_class where true ";
        String cname=clazz.getCname();
        int cid=clazz.getCid();
        if(cid!=0) {
            sql+="and cid ="+cid;
        }
        if(StringUtils.isNoneBlank(cname)) {
            sql+=" and cname like '%"+cname+"%'";
        }
        return super.executeQuery(sql,Clazz.class, pageBean);
    }
    public int add(Clazz clazz) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException {
        String sql="insert into t_struts_class values(?,?,?,?)";
        return super.executeupdate(sql, new String[] {"cid","cname","cteacher","pic"}, clazz);
    }
    public int del(Clazz clazz) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException {
        String sql="delete from t_struts_class where cid=?";
        return super.executeupdate(sql, new String[] {"cid"}, clazz);
    }
    public int edit(Clazz clazz) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException {
        String sql="update t_struts_class set cname=?,cteacher=?,pic=?";
        return super.executeupdate(sql, new String[] {"cname","cteacher","pic","cid"}, clazz);
    }
}

  

4, web layer to call the dao layer data is returned to the front desk

ClazzAction.java

package com.zl.web;

import java.sql.SQLException;
import java.util.List;

import com.zl.dao.ClazzDao;
import com.zl.entity.Clazz;
import com.zl.util.BaseAction;
import com.zl.util.PageBean;
import com.opensymphony.xwork2.ModelDriven;

public class ClazzAction extends BaseAction implements ModelDriven<Clazz>{

    private Clazz clz=new Clazz();
    private ClazzDao clzDao=new ClazzDao();
    public String list(){
        PageBean pageBean =new PageBean();
        pageBean.setRequest(request);
        try {
            List<Clazz> list = this.clzDao.list(clz, pageBean);
            request.setAttribute("clzList",list);
            request.setAttribute("pageBean",pageBean);
        } catch (InstantiationException | IllegalAccessException | SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "list";
        
    }
    /**
     * 跳转编辑页面 (新增修改页面)
     * @return
     */
    public String preSave() {
        if(clz.getCid()!=0) {
            try {
                this.result= this.clzDao.list(clz, null).get(0);
                
            } catch (InstantiationException | IllegalAccessException | SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return "preSave";
        
    }
    public String add() {
        try {
            this.code= this.clzDao.add(clz);
        } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException
                | SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "toList";
        
    }
    public String edit() {
        try {
            this.clzDao.edit(clz);
        } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException
                | SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "toList";
        
    }
    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, configured in struts_sy.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <package name="sy" extends="base" >
    
    <action name="/hello_*" class="com.jt.HelloAction" method="{1}">
      <result name="success">/success.jsp</result>
    </action>
    <action name="/clz_*" class="com.jt.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>
    </package>
</struts>

  

6. Write jsp

clzList.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="/jt"%>
<!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="bname"> <input type="submit"
            value="确定">
    </form>
                    href="${pageContext.request.contextPath}/sy/clz_preSave.action? cid = $ {b.cid} "> Modify </a>  
                    <A
    <a href="${pageContext.request.contextPath}/sy/clz_preSave.action">增加</a>
    <table border="1" width="100%">
        <tr>
            <td>编号</td>
            <td>班级名称</td>
            <td>老师</td>
            <td>班级图片</td>
        </tr>
        <c:forEach items="${clzList }" var="b">
            <tr>
                <td>${b.cid }</td>
                <td>${b.cname }</td>
                <td>${b.cteacher }</td>
                <td>${b.pic }</td>
                <td><a
                    href="${pageContext.request.contextPath}/sy/clz_del.action?cid=${b.cid}">删除</a> 
                    image upload </a><a 
                    href="${pageContext.request.contextPath}/sy/clz_preUpload.action?cid=${b.cid}">
                </td>
            </tr>
        </c:forEach>
    </table>
    <z:page pageBean="${pageBean }"></z:page>
</body>
</html>

  

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" value="${result.cid }" name="cid"><br>
   cname:<input type="text" value="${result.cname }" name="cname"><br>
  cteacher:<input type="text" value="${result.cteacher }" name="cteacher"><br>
   <input type="submit" value="ok">
</form>
</body>
</html>

  

 

Guess you like

Origin www.cnblogs.com/BAYOUA/p/11267487.html