JavaWeb个人博客项目:手把手教你实现博客后台系统之分类管理模块6

:D 没有看过之前博文的人建议从第三篇开始阅读->>https://mp.csdn.net/console/editor/html/104677362

整个项目的代码会在完成这一系列博客后传至csdn下载或github~

照例有任何问题欢迎下方评论>3<

1 图片演示

①分类列表(listCategory.jsp)


②编辑分类(editCategory.jsp)


③增加分类(addCategory.jsp)


④删除分类(确认框)


2 详细分析

①该模块在左侧导航栏第个管理的位置,相关具体代码在index.jsp中位置如下:

(index.jsp的总体代码在上一篇博文,在此不赘述)

     图示如下:

               

表面是由listCategory.jspaddCategory.jsp页面组成,实则还有editCategory.jsp


②数据库设计

(总的数据库设计见之前博文)

属性名

类型

长度

允许空

是否主键

说明

category_id

int

10

NOT NULL

主键

分类id

catagory_name

varchar

20

NOT NULL

 

分类名称

parent_id

int

10

NOT NULL

 

父分类id


③总体分析步骤

    第一步:Category的实体类(pojo层),与数据库表中字段相对应

    第二步:Category的相关Dao层接口(先思考需要实现那些内容,再写接口,需要再添加)

    第三步:CategoryDao接口的实现类CategoryDaoImpl类

    第四步:listCategory.jsp的页面,写相关的servlet层接口,如listPageCategory接口

    第五步:editCategory.jsp的页面,接收传过来的参数,写相关的servlet层接口,如editCategory接口

                (且该页面是借助listCategory.jsp页面的弹出层来完成的

    第六步:addCategory.jsp的页面,写相关的servlet层接口,如listCategory接口                 

                (以下详细介绍各个页面以及数据交互的过程)


listCategory.jsp与editCategory.jsp设计

(1)使用layui里的经典的数据表格布局,这就对他从后台传回来的数据有一定的要求,官网要求如下:

(详细介绍及扩展部分见官网:https://www.layui.com/doc/modules/table.htm l

    


(2)layui的table布局中有三种渲染方法:方法渲染、自动渲染、静态表格渲染,这里使用的是方法渲染,要求如下:

         cols里面各个field对应于每一列的表头,其field的值应该与后台传过来的属性变量名是一样的,这里我的命名和数据库中字段名也是一样的

         url对应的是servlet层的数据接口地址

                                      


(3)利用layui的templet来实现field为'parent_id'的数据模板化

          (比如,传过来的数据是0,然后我要让他变成无,需要两步。)

          第一步:创建一个模板,注意类型是text/html

         代码图示如下:

                        

          第二步:增加一个属性在你想要模块上的那个field上,注意id要对应

         代码图示如下:

                                      


(4)listCatrgory.jsp渲染数据表格时还使用了分页效果,相关步骤如下:

         第一步:设置开启table的分页效果(page:true) 

         第二步:servlet层先获取limit(默认10)和page(默认1)参数值

         第三步:再通过CategoryDaoImpl.java的getPageCategory(page,limit)方法返回相关分类每页数据,是ArrayList对象

         代码图示如下:

                      


         第四步:再通过CategoryDaoImpl.java里getAllCategory()方法返回分类总数据,是ArrayList对象

                       (在这里其实只需返回一个int变量,因为后来还需用它,所以我返回ArrayList对象)

         代码图示如下:

              


      第五步:前台回调数据实现分类列表时,具体来说接收的是符合一定规则的json数据,这里我掌握了两个方法

       First Method:3.1 先使用map集合,保存相关数据格式------>>

                                3.2 再利用google的json解析包将map格式转为string格式,google的json包目录如下

                                 

                                 3.3 然后返回给前台,ajax回调时选择json格式就会自动把其转换为json格式

                                     (这里要注意它使用的是PrintWriter对象的write方法写到前台)


        Second Method: 也是先使用map存储数据,再利用json的jar包,首先你需要如下jar包: 

                                  

        代码图示如下:

             

                                     (这里要注意它使用的是PrintWriter对象的print方法写到前台)


(4)综上,listAdm.jsp页面的详细步骤如下:

         第一步:运用方法渲染的格式,其table的id值与渲染表格的elem值要对应

         图示如下:

                        


         第二步:使用layui的数据表格table结构,在url里写入对应的数据接口(分类列表的数据接口)

         图示如下:

                         


         第三步:写入对应的工具条模板,就相当于操作模板,注意script的type值

         图示如下:

                


         第四步:监听工具条,layEvent对应

         举例如下:

                     


         第五步:(1)点击某一项的编辑按钮时,它就触发监听工具条的事件,通过layEvent确定触发的是“编辑”事件

                       (2)利用弹出层的content属性,走到servlet层,同时将category_id传回去

                       (3)它获取category_id是通过data.category_id的方法

                          (因为之前渲染数据时数据接口返回的值都存在data里头)

                       图示如下:

                               


                       (4)4.1它先走selectServlet这个控制层的接口,

                           4.2然后从Dao层的getOneCategory()通过category_id读取对应的一条管理员的数据,

                           4.3返回的是Category对象,将其对应信息保存在request属性中,

                           4.4最后1再将数据转发到editCategory.jsp页面

                            图示如下:

                             


                       (5)编辑弹出层主要是利用layui的form组件,利用getAttribute()方法获得上一步存储的属性值

                     


         第六步:(1)点击某一项的删除按钮时,它就触发监听工具条的事件,通过layEvent确定触发的是“删除”事件

                        (2)利用layui提供的confirm弹出对话框,提示用户执行下一步操作

                        (3)当用户点击“确定”时,先删除对应行的DOM结构(假删除)

                            再通过ajax向服务端发送删除指令,调用delCategory接口,传过去category_id(真删除),

                        (4)table重新加载——table.reload('demo');

                            其中demo是table的id

                            图示如下:

                                    


                        (5)在delCategory接口中,先获得传过来的id,再利用Dao层的delete(int id)方法,返回值为布尔值

                        (6)将这个boolean值返回给前端,然后前端通过这个值判断是否删除成功

                             图示如下:

                             


⑤addCategory.jsp的设计

(1)addCategory.jsp主要是以layui里的form表单实现分类的增加,设计为一个下拉框输入框重置按钮提交按钮

          图示如下:

                           


(2)addCategory.jsp的下拉框是获取父类别名称,这里设计的是一个无限分类的,当然也可以满足二层分类需求

         第一步:首先设计这个下拉框,默认有一个选项,选中这个选项的就代表是顶层分类,我给其id值设为0

             图示如下:

                           


         第二步:在打开这个页面时,用ajax要动态获取后台传过来的数据,这里主要走listCategory这个接口

             图示如下:

                         

         第三步:后台返回的数据result是一个object类型,参数如下:

                       


(3)用户点击提交后的处理过程,如图所示:

                   


3 具体代码

①Category.java

package pojo;

public class Category {
	private int category_id;
	private int parent_id;
	private String category_name;
	public int getCategory_id() {
		return category_id;
	}
	public void setCategory_id(int category_id) {
		this.category_id = category_id;
	}
	public int getParent_id() {
		return parent_id;
	}
	public void setParent_id(int parent_id) {
		this.parent_id = parent_id;
	}
	public String getCategory_name() {
		return category_name;
	}
	public void setCategory_name(String category_name) {
		this.category_name = category_name;
	}
	
	
	
}

②CategoryDao.java

package dao;

import java.util.ArrayList;

import pojo.Category;

public interface CategoryDao {
	//1.增加分类
	public boolean insertCategory(int parent_id,String category_name);
	//2.获取所有的分类
	public ArrayList<Category> getAllCategory();
	//3.根据id到数据库中查询分类
	public  Category getOneCategory(int category_id);
	//4.修改分类
	public boolean update(Category category);
	//5.删除分类
	public boolean delete(int category_id);
	//6.获得一级目录
	public ArrayList<Category> getFirstCategory();
	//7.获得二级目录
	public ArrayList<Category> getSecondCategory(int parent_id);
	//8.获取分页分类
	public ArrayList<Category> getPageCategory(int page,int limit);
	//9.通过子分类查父分类
	public int getParentCategory(int category_id);
}

③CategoryDaoImpl.java

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import util.DBUtil;
import pojo.Adm;
import pojo.Category;
import pojo.ChangePage;

public class CategoryDaoImpl implements CategoryDao {

	//1.增加分类
	@Override
	public boolean insertCategory(int parent_id,String category_name) {
		//System.out.println("1.你走了我这个方法哦");
		Connection conn = DBUtil.getConnection();
		// 在数据库中添加记录
		String sql = "insert into dai_category(parent_id,category_name) values(?,?)";
		// 预编译
		PreparedStatement prep;
		try {
			prep = conn.prepareStatement(sql);
			prep.setInt(1, parent_id);
			prep.setString(2, category_name);
			prep.executeUpdate();
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		} finally {
			try {
				DBUtil.closeConnection(conn);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	//2.获取所有的分类
	@Override
	public ArrayList<Category> getAllCategory() {
		ArrayList<Category> c = new ArrayList<Category>();
		Connection conn = DBUtil.getConnection();
		// 在数据库中添加记录
		String sql = "select * from dai_category";
		// 预编译
				try {
					PreparedStatement prep = conn.prepareStatement(sql);
					ResultSet rst = prep.executeQuery();
					while (rst.next()) {
						Category c1 = new Category();
						c1.setCategory_id(rst.getInt(1));
						c1.setCategory_name(rst.getString("category_name"));
						c1.setParent_id(rst.getInt("parent_Id"));
						c.add(c1);
					}
				} catch (SQLException e) {
					e.printStackTrace();
				} finally {
					try {
						DBUtil.closeConnection(conn);
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}
		return c;
	}
	
	//3.根据id到数据库中查询分类
	@Override
	public Category getOneCategory(int category_id) {
		//System.out.println("又到了万众瞩目的测试环节啦!!!");
		Category c = null;
		Connection conn = DBUtil.getConnection();
		// 在数据库中修改记录
		String sql = "select * from dai_category where category_id = ?";
		// 预编译
		PreparedStatement prep;
		try {
			prep = conn.prepareStatement(sql);
			prep.setInt(1,category_id);
			ResultSet rst = prep.executeQuery();
			c = new Category();
			if(rst.next()) {
				c.setCategory_id(rst.getInt("category_id"));
				c.setCategory_name(rst.getString("category_name"));
				c.setParent_id(rst.getInt("parent_id"));
				return c;
			}
			
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			try {
				DBUtil.closeConnection(conn);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return c;
	}
	//4.修改分类
	@Override
	public boolean update(Category category) {
		Connection conn = DBUtil.getConnection();
		// 在数据库中修改记录
		String sql = "update dai_category set category_name = ?,parent_id = ? where category_id=?";
		// 预编译
		PreparedStatement prep;
		try {
			prep = conn.prepareStatement(sql);
			prep.setString(1,category.getCategory_name());
			prep.setInt(2, category.getParent_id());
			prep.setInt(3, category.getCategory_id());
			prep.executeUpdate();
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}finally {
			try {
				DBUtil.closeConnection(conn);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
	}
	//5.删除分类
	@Override
	public boolean delete(int category_id) {
		Connection conn = DBUtil.getConnection();
		// 在数据库中删除记录
		String sql = "delete from dai_category where category_id = ?";
		// 预编译
		PreparedStatement prep;
		try {
			prep = conn.prepareStatement(sql);
			prep.setInt(1, category_id);
			prep.executeUpdate();
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		} finally {
			try {
				DBUtil.closeConnection(conn);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	//获得一级目录
	@Override
	public ArrayList<Category> getFirstCategory() {
		System.out.println("获得一级目录");
		ArrayList<Category> c = new ArrayList<Category>();
		Connection conn = DBUtil.getConnection();
		// 在数据库中添加记录
		String sql = "select * from dai_category where parent_id = 0";
		// 预编译
				try {
					PreparedStatement prep = conn.prepareStatement(sql);
					ResultSet rst = prep.executeQuery();
					while (rst.next()) {
						Category c1 = new Category();
						c1.setCategory_id(rst.getInt(1));
						c1.setCategory_name(rst.getString("category_name"));
						c1.setParent_id(rst.getInt("parent_Id"));
						c.add(c1);
					}
				} catch (SQLException e) {
					e.printStackTrace();
				} finally {
					try {
						DBUtil.closeConnection(conn);
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}
				System.out.println("一级目录下有"+c.size()+"条数据");
		return c;
	}

	//获得二级目录
	@Override
	public ArrayList<Category> getSecondCategory(int parent_id) {
		System.out.println("获得二级目录");
		ArrayList<Category> c = new ArrayList<Category>();
		Connection conn = DBUtil.getConnection();
		// 在数据库中添加记录
		String sql = "select * from dai_category where parent_id = ?";
		// 预编译
				try {
					PreparedStatement prep = conn.prepareStatement(sql);
					prep.setInt(1, parent_id);
					ResultSet rst = prep.executeQuery();
					while (rst.next()) {
						Category c1 = new Category();
						c1.setCategory_id(rst.getInt(1));
						c1.setCategory_name(rst.getString("category_name"));
						c1.setParent_id(rst.getInt("parent_Id"));
						c.add(c1);
					}
				} catch (SQLException e) {
					e.printStackTrace();
				} finally {
					try {
						DBUtil.closeConnection(conn);
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}
		return c;
	}

	@Override
	public ArrayList<Category> getPageCategory(int page, int limit) {
		ArrayList<Category> c = new ArrayList<Category>();
		ChangePage cp = new ChangePage();
		cp.setLimit(limit);
		cp.setPage(page);
		int startRow = cp.getStartRow();	
		Connection conn = DBUtil.getConnection();
		// 在数据库中添加记录
		String sql =  "select * from dai_category limit "+startRow+","+limit+"";
		// 预编译
				try {
					PreparedStatement prep = conn.prepareStatement(sql);
					ResultSet rst = prep.executeQuery();
					while (rst.next()) {
						Category c1 = new Category();
						c1.setCategory_id(rst.getInt(1));
						c1.setCategory_name(rst.getString("category_name"));
						c1.setParent_id(rst.getInt("parent_Id"));
						c.add(c1);
					}
				} catch (SQLException e) {
					e.printStackTrace();
				} finally {
					try {
						DBUtil.closeConnection(conn);
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}
		return c;
	}

	@Override
	public int getParentCategory(int category_id) {
		Category c = null;
		Connection conn = DBUtil.getConnection();
		// 在数据库中修改记录
		String sql = "select * from dai_category where category_id = ?";
		// 预编译
		PreparedStatement prep;
		try {
			prep = conn.prepareStatement(sql);
			prep.setInt(1,category_id);
			ResultSet rst = prep.executeQuery();
			c = new Category();
			if(rst.next()) {
				c.setCategory_id(rst.getInt("category_id"));
				c.setCategory_name(rst.getString("category_name"));
				c.setParent_id(rst.getInt("parent_id"));
				return c.getParent_id();
			}
			
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			try {
				DBUtil.closeConnection(conn);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return c.getParent_id();
	}

}

④ListPageCategory.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.CategoryDao;
import dao.CategoryDaoImpl;
import net.sf.json.JSONObject;
import pojo.Category;
import util.JsonUtil;

/**
 * Servlet implementation class ListPageCategory
 */
@WebServlet("/listPageCategory")
public class ListPageCategory extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ListPageCategory() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		int limit = 0;
		int page = 0;	
		PrintWriter writer = null;
		try {
			limit = Integer.parseInt(request.getParameter("limit"));
			page = Integer.parseInt(request.getParameter("page"));
			CategoryDao c = new CategoryDaoImpl();
			ArrayList<Category> aList = c.getAllCategory();
			ArrayList<Category> aPageList = c.getPageCategory(page, limit);
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("code", 0);
			map.put("msg", "");
			map.put("count", aList.size());
			map.put("data", aPageList);
//			String jsonStr = JsonUtil.beanToString(map);
//			writer= response.getWriter();
//			writer.write(jsonStr);
			writer = response.getWriter();
			JSONObject jsonStr = JSONObject.fromObject(map);
			writer.print(jsonStr);
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			writer.flush();
			writer.close();
		}
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

⑤ListCategory.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.ws.ResponseWrapper;

import dao.CategoryDao;
import dao.CategoryDaoImpl;
import pojo.Category;
import util.JsonUtil;

/**
 * Servlet implementation class ListCategory
 */
@WebServlet("/listCategory")
public class ListCategory extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ListCategory() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//response.setContentType("application/json;charset=utf-8");
		PrintWriter writer = null;
		try {
			CategoryDao c = new CategoryDaoImpl();
			ArrayList<Category> aList = c.getAllCategory();
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("code", 0);
			map.put("msg", "");
			map.put("count", aList.size());
			map.put("data", aList);
			String jsonStr = JsonUtil.beanToString(map);
			writer= response.getWriter();
			writer.write(jsonStr);
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			writer.flush();
			writer.close();
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

⑥SelectServlet.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.CategoryDao;
import dao.CategoryDaoImpl;
import pojo.Category;
import util.JsonUtil;

/**
 * Servlet implementation class SelectServlet
 */
@WebServlet("/selectServlet")
public class SelectServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	public SelectServlet() {
		super();
	}
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		try {
			int category_id = Integer.parseInt(request.getParameter("category_id"));
			CategoryDao c = new CategoryDaoImpl();
			Category c1 = c.getOneCategory(category_id);
			if(c1!=null) {
				request.setAttribute("category_id", c1.getCategory_id());
				request.setAttribute("category_name",c1.getCategory_name());
				request.setAttribute("parent_id", c1.getParent_id());
				request.getRequestDispatcher("category/editCategory.jsp").forward(request, response);//转发到成功页面
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

⑦AddServlet.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.CategoryDao;
import dao.CategoryDaoImpl;

/**
 * Servlet implementation class AddServlet
 */
@WebServlet("/addServlet")
public class AddServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AddServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String result = "false";
		PrintWriter writer = null;
		try {
			int parent_id = Integer.parseInt(request.getParameter("parent_id"));
			String category_name = request.getParameter("category_name");
			CategoryDao c = new CategoryDaoImpl();
			boolean flag = c.insertCategory(parent_id, category_name);
			if(flag) {
				result="true";
			}
			writer = response.getWriter();
			writer.write(result);	
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			writer.flush();
			writer.close();
		}
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

⑧DelCategory.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.CategoryDao;
import dao.CategoryDaoImpl;

/**
 * Servlet implementation class DelCategory
 */
@WebServlet("/delCategory")
public class DelCategory extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DelCategory() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String result = "false";
		PrintWriter writer = null;
		try {
			int id = Integer.parseInt(request.getParameter("category_id"));
			CategoryDao c = new CategoryDaoImpl();
			boolean flag = c.delete(id);
			
			if(flag) {
				result="true";
			}
			writer = response.getWriter();
			writer.write(result);	
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			writer.flush();
			writer.close();
		}
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

⑨addCategory.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@include file="../base.jsp"%>
<!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">
<link href="../css/base.css" rel="stylesheet" media="screen" />
<title>增加分类</title>
</head>
<body>
	<div id="box">
		<form class="layui-form" action="">
			<div class="layui-form-item">
				<label class="layui-form-label">父类别名称:</label>
				<div class="layui-input-block">
					<select name="city" lay-verify="" id="pid">
						<option id="0">请选择父类别:可不选</option>
					</select>
				</div>
			</div>
			<div class="layui-form-item">
				<label class="layui-form-label">类别名称:</label>
				<div class="layui-input-inline">
					<input type="text" name="title" lay-verify="title"
						autocomplete="off" placeholder="请输入类别名称" class="layui-input"
						id="category_name" name="category_name">
				</div>
			</div>

			<div class="layui-form-item">
				<div class="layui-input-block">
					<div class="layui-btn"  lay-submit="" lay-filter="demo1" id="sub">立即提交</div>
					<button type="reset" class="layui-btn layui-btn-primary">重置</button>
				</div>
			</div>
		</form>
	</div>
	<script type="text/javascript">
		layui.use([ 'layer' ], function() {
			//	点击提交执行的内容
			$('#sub').click(function() {
				//或者取长度
				if ($("#category_name").val() == "") {
					layer.msg("类别不能输入为空哦!", {
						icon : 2
					});
					return;
				} else {
					var str = $("#pid :selected").attr("id");
					$.post("${ctx}/addServlet",//后台地址
					{
						parent_id:str,
						category_name:$("#category_name").val()
					},//需要提交到后台的数据
					function(result) {
						//alert(typeof result);
						if (result) {
							//添加成功
							layer.msg("添加成功", {
								icon : 1
							});							
						}else{
							alert("难道我是大笨蛋?")
						}
					},//回调函数
					"json");
				}
				//清空表单
				$("#category_name").val("");
			});
		});
	</script>
	<script type="text/javascript">
		function getDataList() {
			$.post("${ctx}/listCategory", {}, function(result) {
				console.log("result"+result);
				with (result) {
					console.log("---------");
					console.log(result);
					console.log(data);
					for (var i = 0; i < data.length; i++) {
						var option = "<option id="+data[i].category_id+">"
								+ data[i].category_name + "</option>";
						$("#pid").append(option);
						layui.form.render('select');
					}
				}

			}, "json");
			$.ajaxSetup({cache:false});
		}
		layui.use('form', function() {
			var form = layui.form;
			getDataList();
			form.render();
		});
	</script>

</body>
</html>

⑩editCategory.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@include file ="../base.jsp" %>
<!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>编辑分类</title>
</head>
<body>
<!-- session由服务器产生,保存在服务器的内存中,sessionid会返回给客户端 -->
<%
	int category_id = (int)request.getAttribute("category_id");
	int parent_id = (int)request.getAttribute("parent_id");
	String category_name = (String)request.getAttribute("category_name");
%>
<form class="layui-form" action="">
<!-- hidden = "hidden"  -->
		<input value = "<%=category_id %>" hidden = "hidden" id = "tid">
		<div class="layui-form-item">
			<label class="layui-form-label">parent_id:</label>
			<div class="layui-input-inline" style="width: 200px;">
				<input type="text" name="title" lay-verify="title"
					autocomplete="off" placeholder="请输入parent_id" class="layui-input"
					id="parent_id" name="topicname"  value = "<%=parent_id%>">
			</div>
		</div>
		<div class="layui-form-item">
			<label class="layui-form-label">类别名称:</label>
			<div class="layui-input-inline" style="width: 200px;">
				<input type="text" name="title" lay-verify="title"
					autocomplete="off" placeholder="请输入类别名称" class="layui-input"
					id="category_name" name="topicname"  value = "<%=category_name%>">
			</div>
		</div>
		<div class="layui-form-item">
			<div class="layui-input-block">
				<div class="layui-btn" lay-submit="" lay-filter="demo1" id="sub">立即提交</div>
				<button type="reset" class="layui-btn layui-btn-primary">重置</button>
			</div>
		</div>
	</form>
	<script type="text/javascript">
	layui.use([ 'layer' ], function() {
	$("#sub").click(function(){
		if($("#category_name").val() == ""){
			layer.msg("不能输入为空哦!", {
				icon : 2
			});
			return;
		}else{
			$.post("${ctx}/editCategory",//后台地址
					{
						parent_id : $("#parent_id").val(),
						category_name : $("#category_name").val(),
						category_id : $("#tid").val()
					},//需要提交到后台的数据
					function(result) {
						if (result) {
							//修改成功
							layer.msg("修改成功", {
								icon : 1
							});
							//假设这是iframe页
							var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
							parent.layer.close(index); //再执行关闭        
						}
					},//回调函数
					"json");
		}
		});
	});
	</script>
</body>
</html>

⑪listCategory.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@include file="../base.jsp"%>
<!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">
<link href="../css/base.css" rel="stylesheet" media="screen" />
<title>分类列表</title>
</head>
<body>
<div id="box">
	<table id="demo" lay-filter="test"></table>
</div>
</body>
<script>
	layui.use('table', function() {
		var table = layui.table;
		//开始渲染表格
		table.render({
			elem : '#demo',//要渲染的表格id
			height : 480,//表格的高度
			width : 586,
			url : '${ctx}/listPageCategory', //数据接口
			page : true, //开启分页
			cols : [ [ //表头
			{
				field : 'category_id',
				title : 'ID',
				width : 100,
				sort : true,
				fixed : 'left'
			},
			 {
				field : 'parent_id',
				title : '父类名',
				width : 120,
				templet:'#manageParentId'
			},
			{
				field : 'category_name',
				title : '类名',
				width : 180
			}, {
				title : '操作',
				toolbar : '#barDemo',
				width : 180
			} ] ]
		});
		//监听工具条
		table.on('tool(test)', function(obj) { //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
			var data = obj.data; //获得当前行数据
			var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
			var tr = obj.tr; //获得当前行 tr 的DOM对象

			if (layEvent === 'detail') { //查看
				/* 
				后来可以查看父id的值
				*/
				layer.msg("你今天真好看!!", {
					icon : 1
				});
				//alert(data.category_id);
				//do somehing
			} else if (layEvent === 'del') { //删除
				layer.confirm('真的删除该分类么??', function(index) {
					obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
					layer.close(index);
					//向服务端发送删除指令
					$.post("${ctx}/delCategory", {
						category_id : data.category_id
					}, function(result) {
						if (result) {
							layer.msg("删除成功!!", {
								icon : 1
							});
							table.reload('demo');
						}
					}, "json");
				});
				layer.close(index);
			} else if (layEvent === 'edit') { //编辑
				//弹出层
				layer.open({
					title : ["编辑分类","text-align:center"],
					type : 2,
					offset : [ "80px" ],//位置
					area : [ "500px", "220px" ],//大小
					content : ['${ctx}/selectServlet?category_id=' + data.category_id,"no"], //这里content是一个URL,如果你不想让iframe出现滚动条,你还可以content: ['http://sentsin.com', 'no']
					anim:1,
					//当窗口关闭时执行
					end : function() {
						table.reload('demo');
					}
				});

			}
		});
	});
</script>
<!--工具条模板  -->
<script type="text/html" id="barDemo">
  <a class="layui-btn layui-btn-xs" lay-event="detail">查看</a>
  <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
  <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>  
</script>
<!-- 处理父类 -->
<script type="text/html" id="manageParentId">
	  <div>
            {{# var fu = function(){
                            var eType = d.parent_id;
                            if(eType == 0){return "无";}
                            else if(eType == 3){return "杂谈";}
                            else if(eType == 4){return "技术笔记";}
                            else{return "其它";}
                        }
            }}
            {{fu()}}
            </div>
</script>
</html>

以后重复的知识点我就不赘写了,这篇博文实在写太久了。

正好待疫情过去企业的人要来学校授课,我会把这个项目到时候抽空改一下,不用后台框架感觉在重复造轮子。

照例欢迎下方给我评论留言,我看到的话就回复哒>3<

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章