14-EasyUI尚硅谷 - tree(拖拽效果和后台同步)
将任意节点拖拽到任意节点里面,同时改变前台、后台和数据库,数据表同上一节
(还有一个参数:point,取值可能是:append,bottom,top,这里暂时不讨论)
操作之前:
后台:
ResourceServlet.java:
package sxt.easyui.servlet; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONArray; import sxt.easyui.model.Resource; import sxt.easyui.model.TreeDTO; import sxt.easyui.util.DBHelper; // 资源Servlet @SuppressWarnings("serial") public class ResourceServlet extends HttpServlet { private Connection conn = null; private PreparedStatement ps = null; private ResultSet rs = null; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String method = req.getParameter("method"); if ("loadTree".equals(method)) { this.loadTree(req, resp); } else if ("changeNode".equals(method)) { this.changeNode(req, resp); } else { try { throw new Exception("请求失败!"); } catch (Exception e) { e.printStackTrace(); } } } // 节点拖拽 private void changeNode(HttpServletRequest req, HttpServletResponse resp) { String targetId = req.getParameter("targetId"); String sourceId = req.getParameter("sourceId"); String result = "{\"status\":\"success\"}"; try { String sql = "UPDATE resource SET parent_id=? WHERE id=?"; conn = DBHelper.getConn(); ps = DBHelper.prepare(conn, sql); ps.setString(1, targetId); ps.setString(2, sourceId); int count = ps.executeUpdate(); if (count != 1) { // 操作失败 result = "{\"status\":\"error\"}"; } resp.setContentType("text/html;charset=utf-8"); resp.getWriter().write(result); } catch (Exception e) { result = "{\"status\":\"error\"}"; resp.setContentType("text/html;charset=utf-8"); try { resp.getWriter().write(result); } catch (IOException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally { DBHelper.close(ps); DBHelper.close(conn); } } }
013_tree_dataLoad.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>Tree</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="js/jquery-easyui-1.2.6/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="js/jquery-easyui-1.2.6/themes/icon.css"> <script type="text/javascript" src="js/jquery-easyui-1.2.6/jquery-1.7.2.min.js"></script> <script type="text/javascript" src="js/jquery-easyui-1.2.6/jquery.easyui.min.js"></script> <script type="text/javascript" src="js/jquery-easyui-1.2.6/locale/easyui-lang-zh_CN.js"></script> <script type="text/javascript"> $(function() { $("#t2").tree({ url: "ResourceServlet?method=loadTree", //animate: true, checkbox: true, dnd: true, // 拖拽,后台同步, target:要把节点拖拽到那个节点里,是DOM元素;source:被拖拽的节点,是js对象;point:操作范方式,append,top,bottom onDrop: function(target, source, point) { var target = $("#t2").tree("getNode", target); // 把DOM元素转换成js对象 var targetId = target.id; // 目标节点id var sourceId = source.id; // 被拖拽的节点id var url = "ResourceServlet?method=changeNode"; var args = {"time": new Date(), "targetId": targetId, "sourceId": sourceId}; $.post(url, args, function(result) { // 如果错误就提示,成功就什么也不做, 失败:{"status":"error"} var jsonObj = $.parseJSON(result); if (jsonObj.status == "error") { $.messager.alert("提示信息", "操作失败!", "error", function() { // 恢复数据到操作前 }); } else { $.messager.show({ title: "提示信息", msg: "操作成功!" }); } }); } }); }); </script> </head> <body> <ul id="t2"></ul> </body> </html>
操作之后: