韦德国际1946英国 > 计算机网络 > 新伟德国际首页:无脑操作,基于EasyUI的基础之

原标题:新伟德国际首页:无脑操作,基于EasyUI的基础之

浏览次数:136 时间:2019-08-10

4、创造接口DAO


  1 // 记录添加还是修改
  2 var flag;
  3 // 临时存储选中节点数据
  4 var tempNode;
  5 
  6 // 页面加载
  7 $(function () {
  8     // 菜单树绑定数据
  9     $('#deptTree').tree({
 10         url: '/department/tree',
 11         animate: true,
 12         lines: true,
 13         onBeforeSelect: function (node) {
 14             // onBeforeSelect事件:节点被选中前触发,返回false则取消选择动作
 15             if (!$(this).tree('isLeaf', node.target)) {
 16                 // 不是叶子节点,则不能选中
 17                 return false;
 18             }
 19         },
 20         onClick: function (node) {
 21             // alert(node.target.innerText);
 22         },
 23         onContextMenu: function (e, node) {
 24             // 记录选中的节点,为后续增删改操作提供节点数据
 25             tempNode = node;
 26 
 27             // 阻止右键默认事件
 28             e.preventDefault();
 29 
 30             // 判断该结点有没有父结点
 31             var root = $(this).tree('getParent', node.target);
 32             // 没有父节点则为根结点,可以新增、编辑,不可以删除
 33             if (root == null) {
 34                 // 如果是根节点,则可以新增、编辑,不可以删除
 35                 $('#parentNode').menu('show', {
 36                     left: e.pageX,
 37                     top: e.pageY
 38                 });
 39             }
 40 
 41             if ($(this).tree('isLeaf', node.target)) {
 42                 // 如果是叶子节点,则可以新增、编辑和删除
 43                 $('#leaf').menu('show', {
 44                     left: e.pageX,
 45                     top: e.pageY
 46                 });
 47             } else {
 48                 // 如果不是叶子节点,则可以新增、编辑,不可以删除
 49                 $('#parentNode').menu('show', {
 50                     left: e.pageX,
 51                     top: e.pageY
 52                 });
 53             }
 54         }
 55     });
 56 
 57     // 保存按钮押下处理
 58     $('#btnSave').click(function () {
 59         var tempdata, tempurl, tempmsg;
 60 
 61         if (flag == 'add') {
 62             tempurl = 'saveNode';
 63             tempmsg = '添加成功!';
 64             tempdata = {
 65                 departmentpid: tempNode.id,
 66                 departmentname: $('#treefrm').find('input[name=departmentname]').val()
 67             };
 68         } else if (flag == 'edit') {
 69             tempurl = 'updateNode';
 70             tempmsg = '编辑成功!';
 71             tempdata = {
 72                 departmentid: $('#treefrm').find('input[name=departmentid]').val(),
 73                 departmentpid: $('#deptTree').tree('getParent', tempNode.target).id,
 74                 departmentname: $('#treefrm').find('input[name=departmentname]').val()
 75             };
 76         }
 77 
 78         $.ajax({
 79             type: 'post',
 80             async: true,
 81             url: tempurl,
 82             data: tempdata,
 83             dataType: 'json',
 84             success: function (result) {
 85                 // 树重新加载
 86                 $('#deptTree').tree('reload');
 87 
 88                 $.messager.show({
 89                     title: '提示信息',
 90                     msg: tempmsg
 91                 });
 92             },
 93             error: function (result) {
 94                 // 请求失败时执行该函数
 95                 $.messager.show({
 96                     title: '错误信息',
 97                     msg: result.msg
 98                 });
 99             }
100         });
101 
102         $('#treefrm').form('clear');
103         $('#info').dialog('close');
104     });
105 
106     // 取消按钮押下处理
107     $('#btnCancel').click(function () {
108         $('#treefrm').form('clear');
109         $('#info').dialog('close');
110     });
111 });
112 
113 // 新增节点
114 var addNode = function () {
115     flag = 'add';
116     // 清空表单数据
117     $('#treefrm').form('clear');
118     // 打开dialog
119     $('#info').dialog('open').dialog('setTitle', '新增');
120 };
121 
122 // 编辑节点
123 var updateNode = function () {
124     flag = 'edit';
125     // 清空表单数据
126     $('#treefrm').form('clear');
127     $('#treefrm').form('load', {
128         departmentid: tempNode.id,
129         departmentname: tempNode.text
130     });
131     // 打开dialog
132     $('#info').dialog('open').dialog('setTitle', '编辑');
133 };
134 
135 // 删除节点
136 var removeNode = function () {
137     // 前台删除
138     $('#deptTree').tree('remove', tempNode.target);
139 
140     // 后台删除
141     $.ajax({
142         type: "post",
143         async: true,           // 异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
144         url: "deleteNode",
145         data: {departmentid: tempNode.id},
146         dataType: "json",      // 返回数据形式为json
147         success: function (result) {
148             // 请求成功时执行该函数内容,result即为服务器返回的json对象
149             $.messager.show({
150                 title: '提示信息',
151                 msg: '删除成功!'
152             });
153         },
154         error: function (result) {
155             // 请求失败时执行该函数
156             $.messager.show({
157                 title: '错误信息',
158                 msg: result.msg
159             });
160         }
161     });
162 };

5、完成DAO接口方法Bean

运用SSH架构(Spring SpringMVC Hibernate)达成了简便的检察问卷网址。最终效果如图:

  1 /**
  2  * EasyUI Tree的封装类
  3  */
  4 public class TreeNode {
  5     private Integer id;                      // 节点的 id
  6     private Integer parentId;                // 父节点id,java生成树时使用
  7     private String text;                    // 显示的节点文字。
  8     private String iconCls;                 // 节点图标样式    "iconCls":"icon-save",  "iconCls":"icon-ok", 等
  9     private String state;                   // 节点状态, 'open' 或 'closed',默认是 'open'。当设为 'closed' 时,此节点有子节点,并且将从远程站点加载它们。
 10     private String flag;                    // 节点类型
 11     private Integer trueId;                 // 应用系统真实 id
 12     private boolean checked;                // 指示节点是否被选中。
 13     private LinkedHashMap<?, ?> attributes; // 给一个节点追加的自定义属性。
 14     private List<TreeNode> children;        // 定义了一些子节点的节点数组。
 15     private String url;                     // 扩展属性url
 16 
 17     public Integer getTrueId() {
 18         return trueId;
 19     }
 20 
 21     public void setTrueId(Integer trueId) {
 22         this.trueId = trueId;
 23     }
 24 
 25     public String getFlag() {
 26         return flag;
 27     }
 28 
 29     public void setFlag(String flag) {
 30         this.flag = flag;
 31     }
 32 
 33     public Integer getId() {
 34         return id;
 35     }
 36 
 37     public void setId(Integer id) {
 38         this.id = id;
 39     }
 40 
 41     public Integer getParentId() {
 42         return parentId;
 43     }
 44 
 45     public void setParentId(Integer parentId) {
 46         this.parentId = parentId;
 47     }
 48 
 49     public String getText() {
 50         return text;
 51     }
 52 
 53     public void setText(String text) {
 54         this.text = text;
 55     }
 56 
 57     public String getIconCls() {
 58         return iconCls;
 59     }
 60 
 61     public void setIconCls(String iconCls) {
 62         this.iconCls = iconCls;
 63     }
 64 
 65     public String getState() {
 66         return state;
 67     }
 68 
 69     public void setState(String state) {
 70         this.state = state;
 71     }
 72 
 73     public boolean isChecked() {
 74         return checked;
 75     }
 76 
 77     public void setChecked(boolean checked) {
 78         this.checked = checked;
 79     }
 80 
 81     public LinkedHashMap<?, ?> getAttributes() {
 82         return attributes;
 83     }
 84 
 85     public void setAttributes(LinkedHashMap<?, ?> attributes) {
 86         this.attributes = attributes;
 87     }
 88 
 89     public List<TreeNode> getChildren() {
 90         return children;
 91     }
 92 
 93     public void setChildren(List<TreeNode> children) {
 94         this.children = children;
 95     }
 96 
 97     public String getUrl() {
 98         return url;
 99     }
100 
101     public void setUrl(String url) {
102         this.url = url;
103     }
104 }

 1 /**
 2  * 树工具类
 3  */
 4 public class TreeUtil {
 5     /**
 6      * Tree装配方法
 7      *
 8      * @param tempTreeNodes
 9      * @param treeNodes
10      * @return
11      */
12     public static List<TreeNode> Assemble(List<TreeNode> tempTreeNodes, List<TreeNode> treeNodes) {
13         if (tempTreeNodes != null) {
14             Map<Integer, TreeNode> map = new LinkedHashMap<>();
15             for (TreeNode tn : tempTreeNodes) {
16                 map.put(tn.getId(), tn);
17             }
18 
19             TreeNode treeNode;
20             TreeNode pTreeNode;
21             for (Integer id : map.keySet()) {
22                 treeNode = map.get(id);
23                 if (treeNode.getParentId() == 0) {
24                     treeNodes.add(treeNode);
25                 } else {
26                     pTreeNode = map.get(treeNode.getParentId());
27                     List<TreeNode> children = pTreeNode.getChildren();
28                     if (children != null) {
29                         children.add(treeNode);
30                     } else {
31                         children = new ArrayList();
32                         children.add(treeNode);
33                         pTreeNode.setChildren(children);
34                     }
35                 }
36             }
37         }
38 
39         return treeNodes;
40     }
41 }
package com.hsj.dao.bean; 
import java.lang.reflect.Field; 
import java.lang.reflect.Method; 
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 com.hsj.dao.MenuDao; 
import com.hsj.domain.Menu; 
import com.hsj.domain.TreeDTO; 
import com.hsj.utils.JDBCUtils; 
public class MenuDaoBean implements MenuDao{ 
 public <T> int getTotalRecord(Class<T> clazz) { 
  // TODO Auto-generated method stub 
  return 0; 
 } 
 public <T> void save(T t) 
 { 
  //1.根据对象得到类模板对象 
  Class<T> clazz= (Class<T>) t.getClass(); 
  //2.得到当前类中所有字段组成的数组,不管访问权限如何,但不包括父类中的字段 
  Field[] fields=clazz.getDeclaredFields(); 
  //insert into t_menu(field1,field2,....) values(value1,value2,....) 
  List<String> key=new ArrayList<String>();//key用来存储字段列表 
  List<Object> value=new ArrayList<Object>();//value用来存储值列表 
  String methodName=null; 
  Method method=null; 
  for(int i=0;i<fields.length;i  ) 
  { 
   try 
   {  
    //getName 
    methodName="get" getMethodName(fields[i].getName()); 
    method=clazz.getMethod(methodName); 
    Object o=method.invoke(t); 
    if(o!=null && !"id".equals(fields[i].getName())) 
    { 
      key.add(fields[i].getName()); 
      value.add(o);      
    } 
   } 
   catch (Exception e) 
   { 
    e.printStackTrace(); 
   }; 
  } 
  //组拼sql语句 
  //String table=clazz.getName().substring(clazz.getName().lastIndexOf(".") 1); 
  String table=clazz.getSimpleName(); 
  StringBuffer sql= new StringBuffer("insert into " table " ("); 
  StringBuffer values=new StringBuffer(" values("); 
  for(int i=0;i<value.size();i  ) 
  { 
     sql.append(key.get(i) ","); 
     values.append("?,"); 
  } 
  //insert into menu (name,url) 
  sql.deleteCharAt(sql.length()-1).append(")"); 
  //values(?,?) 
  values.deleteCharAt(values.length()-1).append(")"); 
  //insert into menu (name,url) values(?,?) 
  sql.append(values); 
  Connection conn=null; 
  PreparedStatement ps=null; 
  try 
  { 
   conn=JDBCUtils.getConnection(); 
   ps=conn.prepareStatement(sql.toString()); 
   //只有Object[]不为空且数组中有元素 
   if(key!=null && key.size()>0) 
   { 
    for(int i=0;i<key.size();i  ) 
    { 
     ps.setObject(i 1,value.get(i)); 
    } 
   } 
   System.out.println(ps.toString()); 
   ps.execute(); 
   System.out.println("添加成功"); 
  } 
  catch (Exception e) { 
   e.printStackTrace(); 
  }finally{ 
   JDBCUtils.close(null, ps, conn); 
  } 
 } 
 /** 
  * 将该字符串的一个字母变成大写 
  * @param fildeName 字符串 
  * @return 
  * @throws Exception 
  */ 
 private static String getMethodName(String fieldName) throws Exception 
 { 
  byte[] items = fieldName.getBytes(); 
  items[0] = (byte) ((char) items[0] - 'a'   'A'); 
  return new String(items); 
 } 
 /** 
  * 根据菜单的父id找到他所有的子菜单并存储到集合中 
  */ 
 public List<TreeDTO> getChildrenByParentId(String parentId) { 
  Connection conn = null; 
  PreparedStatement ps = null; 
  ResultSet rs = null; 
  List<Menu> menus=new ArrayList<Menu>(); 
  List<TreeDTO> treeDTOS=new ArrayList<TreeDTO>(); 
  try 
  { 
   String sql=""; 
   if(parentId==null || "".equals(parentId)) 
   { 
    sql="select * from menu where parent_id=0"; 
   }else{ 
    sql="select * from menu where parent_id=" parentId; 
   } 
   conn=JDBCUtils.getConnection(); 
   ps=conn.prepareStatement(sql); 
   rs=ps.executeQuery(); 
   while(rs.next()) 
   { 
     Menu menu=new Menu(); 
     menu.setId(rs.getInt("id")); 
     menu.setIcon(rs.getString("icon")); 
     menu.setUrl(rs.getString("url")); 
     menu.setChecked(rs.getString("checked")); 
     menu.setName(rs.getString("name")); 
     menu.setParent_id(rs.getInt("parent_id")); 
     menus.add(menu); 
   } 
  }catch(Exception e){ 
   e.printStackTrace(); 
  }finally{ 
   JDBCUtils.close(rs, ps, conn); 
  } 
  for(Menu m : menus) 
  { 
   TreeDTO td=new TreeDTO(); 
   td.setId(m.getId()); 
   td.setText(m.getName()); 
   td.setChecked(m.getChecked()); 
   td.setIconCls(m.getIcon()); 
   td.setParent_id(m.getParent_id()); 
   List<Menu> childrenList=getChildren(m.getId()); 
   if(childrenList.size()>0) 
   { 
    td.setState("closed"); 
   }else{ 
    td.setState("open"); 
   } 
   Map<String,Object> attributes=new HashMap<String,Object>(); 
   attributes.put("url", m.getUrl()); 
   td.setAttributes(attributes); 
   treeDTOS.add(td); 
  } 
  return treeDTOS; 
 } 
 /** 
  * 根据当前菜单的主键值找到当前菜单有哪些子菜单对象组成的集合并返回 
  * @param id 
  * @return 
  */ 
 public List<Menu> getChildren(int id) 
 { 
  Connection conn = null; 
  PreparedStatement ps = null; 
  ResultSet rs = null; 
  List<Menu> menus=new ArrayList<Menu>(); 
  try 
  { 
   conn=JDBCUtils.getConnection(); 
   ps=conn.prepareStatement("select * from menu where parent_id=" id); 
   rs=ps.executeQuery(); 
   while(rs.next()) 
   { 
     Menu menu=new Menu(); 
     menu.setId(rs.getInt("id")); 
     menu.setIcon(rs.getString("icon")); 
     menu.setUrl(rs.getString("url")); 
     menu.setChecked(rs.getString("checked")); 
     menu.setName(rs.getString("name")); 
     menu.setParent_id(rs.getInt("parent_id")); 
     menus.add(menu); 
   } 
  } 
  catch(Exception e) 
  { 
   e.printStackTrace(); 
  }finally{ 
   JDBCUtils.close(rs, ps, conn); 
  } 
  return menus; 
 } 
 /** 
  * 根据菜单的主键查找当前菜单对象 
  */ 
 public Menu findMenuById(int id) { 
  Connection conn = null; 
  PreparedStatement ps = null; 
  ResultSet rs = null; 
  Menu menu=null; 
  try 
  { 
   conn=JDBCUtils.getConnection(); 
   ps=conn.prepareStatement("select * from menu where id=" id); 
   rs=ps.executeQuery(); 
   if(rs.next()) 
   { 
     menu=new Menu(); 
     menu.setId(rs.getInt("id")); 
     menu.setIcon(rs.getString("icon")); 
     menu.setUrl(rs.getString("url")); 
     menu.setChecked(rs.getString("checked")); 
     menu.setName(rs.getString("name")); 
     menu.setParent_id(rs.getInt("parent_id")); 
   } 
  } 
  catch(Exception e) 
  { 
   e.printStackTrace(); 
  }finally{ 
   JDBCUtils.close(rs, ps, conn); 
  } 
  return menu; 
 } 
 public void update(Menu menu) { 
  Connection conn = null; 
  PreparedStatement ps = null; 
  ResultSet rs = null; 
  try 
  { 
   conn=JDBCUtils.getConnection(); 
   ps=conn.prepareStatement("update menu set name=?,url=?,checked=?,icon=?,parent_id=? where id=?"); 
   ps.setString(1, menu.getName()); 
   ps.setString(2, menu.getUrl()); 
   ps.setString(3, menu.getChecked()); 
   ps.setString(4, menu.getIcon()); 
   ps.setInt(5, menu.getParent_id()); 
   ps.setInt(6, menu.getId()); 
   ps.executeUpdate(); 
  } 
  catch(Exception e) 
  { 
   e.printStackTrace(); 
  }finally{ 
   JDBCUtils.close(rs, ps, conn); 
  } 
 } 
 /** 
  * 根据主键删除当前菜单对象 
  */ 
 public void delete(int id) { 
  Connection conn = null; 
  PreparedStatement ps = null; 
  ResultSet rs = null; 
  try 
  { 
   conn=JDBCUtils.getConnection(); 
   ps=conn.prepareStatement("delete from menu where id=" id); 
   ps.executeUpdate(); 
  } 
  catch(Exception e) 
  { 
   e.printStackTrace(); 
  }finally{ 
   JDBCUtils.close(rs, ps, conn); 
  } 
 } 
 /** 
  * 根据当前菜单的主键值删除当前菜单的所有子菜单及当前菜单对象 
  */ 
 public void deleteChildren(int id) 
 { 
  List<Menu> menus=getChildren(id); 
  for(int i=0;i<menus.size();i  ) 
  { 
   int cid=menus.get(i).getId(); 
   //delete(cid); 
   deleteChildren(cid); 
  } 
  delete(id); 
 } 
 /** 
  * 根据菜单的父id删除所有子菜单 
  */ 
 public void deleteChildrenByParentId(int parentId) { 
  Connection conn = null; 
  PreparedStatement ps = null; 
  ResultSet rs = null; 
  try 
  { 
   conn=JDBCUtils.getConnection(); 
   ps=conn.prepareStatement("delete from menu where parent_id=" parentId); 
   System.out.println("=========" ps.toString()); 
   ps.executeUpdate(); 
  } 
  catch(Exception e) 
  { 
   e.printStackTrace(); 
  }finally{ 
   JDBCUtils.close(rs, ps, conn); 
  } 
 } 
} 

3.4 管理员登入,查看结果。(身份验证后,JSP展现结果)

提供管理员登入页面login.jsp,登入后跻身参加评比人列表页面result.jsp;点击参加评比人超链接,走入详细战绩页面detail.jsp,计算解析个人得票结果。

到那边曾经没有怎么难度,不再写了。


2、建库建表

package com.hsj.dao; 
import java.util.List; 
import com.hsj.domain.Menu; 
import com.hsj.domain.TreeDTO; 
public interface MenuDao{ 
 /** 
  * 根据父节点的值查询所有的子节点 
  * @param parentId 
  * @return 
  */ 
 public List<TreeDTO> getChildrenByParentId(String parentId); 
 /** 
  * 根据id值查询当前对象 
  * @param id 
  * @return 
  */ 
 public Menu findMenuById(int id); 
 /** 
  * 保存指定对象 
  * @param <T> 
  * @param t 
  */ 
 public <T> void save(T t); 
 /** 
  * 修改菜单对象 
  * @param menu 
  */ 
 public void update(Menu menu); 
 /** 
  * 根据id删除指定对象 
  * @param id 
  */ 
 public void delete(int id); 
 /** 
  * 根据父节点删除当前父节点下所有的子节点 
  * @param parentId 父节点id 
  */ 
 public void deleteChildrenByParentId(int parentId); 
 /** 
  * 根据当前节点 的id值删除它的所有子节点 
  * @param id 
  */ 
  public void deleteChildren(int id); 
} 

付出步骤

6、规划调整器 DepartmentController.java

JDBCUtils.Java

支出条件

合龙开拓条件(IDE):速龙liJ IDEA 2017.3.2
地点服务器:汤姆cat 9.0.2
数据库: MySQL 5.7
品类管理:Maven
操作系统:MacOS


 1 DROP TABLE biz_department;
 2 CREATE TABLE biz_department
 3 (
 4     departmentid INT AUTO_INCREMENT PRIMARY KEY COMMENT '部门编号',
 5     departmentpid INT NOT NULL COMMENT '部门父编号',
 6     departmentname VARCHAR(10) NOT NULL COMMENT '部门名称'
 7 ) ENGINE=INNODB COMMENT='部门信息';
 8 INSERT INTO biz_department VALUES
 9 (NULL, 0, '总部'),
10 (NULL, 1, '上海分公司'), (NULL, 1, '安徽分公司'),
11 (NULL, 3, '合肥办事处'), (NULL, 3, '铜陵办事处');

Web.xml

前言


TreeDTD.java

3.1 输入网址步向投票分界面。(SpringMVC调节网址->页面包车型地铁投射)

3.1.1 在web.xml中配置SpringMVC使之生效,web.xml:

   <servlet>
        <servlet-name>spring-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

3.1.2 在SpringMVC的布局文件servletname-servlet.xml中布署地址过滤法则,spring-dispatcher-servlet.xml:

    <context:component-scan base-package="web.quiz.controller" /><!-- 要扫描的包-->
    <mvc:annotation-driven />
    <!-- 解析网址,加前缀后缀,比如输入index时定位到/WEB-INF/jsp/index.jsp-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!-- 不拦截静态资源,保证对js、css、jpg等的正常访问 -->
    <mvc:default-servlet-handler />

3.1.3 最后,在Controller中决定页面分发,QuizController.java:

    @RequestMapping(value = "vote", method = RequestMethod.GET)
    public String index() {
        return "vote";
    }

Easyui中的Tree组件使用作用颇高,常常遇上的要求如下:

第一步: 首先,先将 jquery-easyui-1.2.6 文件引进到工程项目下,并在jsp页面上跻身引进3个jsp文件和2个css文件。如下:

新伟德国际首页,结语

到头来搭好Java SSH那几个架子,完毕了基本功效,但不想再持续写了。Web才能迭代太快,前面去品味下其余技艺。

  • maven SpringBoot JPA EasyUI实现CRUD及分页](
drop database easyui; 
create database easyui; 
use easyui; 
show tables; 
#创建菜单表 
create table menu( 
 id int(11) not null auto_increment, ####菜单id### 
 name varchar(20) default null,  ####菜单名#### 
 url varchar(100) default null,  #### 菜单url#### 
 checked varchar(10) default null, ####菜单是否被选中 
 icon varchar(30) default null,  ####菜单图标#### 
 parent_id int(11) default null,  ####父节点菜单的id#### 
 primary key(id)       ####id是主键####    
); 
#插入测试数据   ####测试数据#### 
insert into menu(id,name,url,checked,icon,parent_id) values 
(1,'权限菜单',null,'',null,0), 
(2,'用户管理',null,'0',null,1), 
(3,'岗位管理',null,'',null,1), 
(4,'资源管理',null,'',null,1), 
(5,'用户功能1',null,'',null,2), 
(6,'岗位功能1',null,'0',null,3), 
(7,'资源功能2','/easyui/index.jsp','0',null,3), 
(8,'资源功能1','sss','0',null,4), 
(9,'岗位功能2',null,'',null,3), 
(10,'资源功能3','111','0',null,4), 
(11,'资源管理4','222','',null,4), 
(14,'岗位功能3','dfds',null,null,3), 
(17,'用户功能2','sss','0',null,2); 
#查看数据 
select * from menu; 
//查询跟节点 
select * from menu where parent_id=0; 
#查看指定父节点下有哪些子节点 
select * from menu where parent_id=2; 

3.2 获取问卷内容。(Hibernate Spring从数据库中读取问卷新闻,发送到前端页面)

3.2.1 首先应用Hibernate关联对象与数据库。Hibernate有安顿xml和注释三种落成形式,本文使用注脚。Person.java:

//@javax.persistence.Entity注解一个实体Bean。数据表中的行对应实例,列对应实例的属性
    @Entity
    public class Person {
        @Id   //必须使用 @javax.persistence.Id 注解一个主键;
        private String id;             //编号
        private String name;            //姓名
    }

3.2.2 然后完结相应的DAO接口。PersonDAO.java、PersonDAOImpl.java:

    public interface PersonDAO {
        public List<Person> getAll();
    }

    @Repository //@Repository用于标注数据访问组件,即DAO组件;
    public class PersonDAOImpl implements PersonDAO{
    @Autowired //@Autowired可以对成员变量、方法和构造函数进行标注,来完成自动装配。默认按照类型进行装配。
    private SessionFactory sessionFactory;
      public List<Person> getAll() {
          Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Person.class);
          return criteria.list();
      }
  }

3.2.3 PersonDAOImpl中要用的sessionFactory怎么来?什么是SessionFactory:

SessionFactory接口担当初叶化Hibernate。SessionFactory并不是轻量级的,因为一般意况下,多个类别一般只须求七个SessionFactory就够。

故而把SessionFactory放在Web开端化时候生成,使用Spring完结其自行李装运配。

首先在web.xml中配置Spring:

    <!--配置Spring-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:/META-INF/applicationContext.xml,
            classpath:/META-INF/spring-jdbc.xml
        </param-value>
    </context-param>

接下来在Spring配置文件中配置Hibernate,spring-jdbc.xml:

       <!--自定义的hibernate.properties文件,下面${XXX}的内容来源-->
       <context:property-placeholder location="classpath:/META-INF/properties/hibernate.properties" />

       <!-- 使用C3P0数据源,MySQL数据库 -->
       <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
             destroy-method="close">
              <!-- MySQL5 -->
              <property name="driverClass" value="${driverClassName}"></property>
              <property name="jdbcUrl" value="${url}"></property>
              <property name="user" value="${username}"></property>
              <property name="password" value="${password}"></property>
       </bean
       <!-- session工厂 -->
       <bean id="sessionFactory"
             class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
              <property name="dataSource" ref="dataSource" />
              <property name="packagesToScan" value="web.quiz.model" />
              <property name="hibernateProperties">
                     <props>
                            <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
                            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                            <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
                     </props>
              </property>
       </bean>
        <!--hibernate的事务管理器-->
       <bean id="transactionManager"
             class="org.springframework.orm.hibernate4.HibernateTransactionManager">
              <property name="sessionFactory" ref="sessionFactory"></property>
       </bean>

在Spring的暗许配置文件applicationContext.xml中配置扫描的包。那几个包中有Spring评释为@Component的类,在采用评释配置的景况下,系统运维时会被自动扫描,并增添到bean工厂中去(省去了陈设文件中写bean定义了)。applicationContext.xml:

    <context:component-scan base-package="web.quiz.service"/>
    <context:component-scan base-package="web.quiz.DAO"/>

迄今截止,PersonDAOImpl中有了可用的sessionFactory,它的魔法也能尽数实现了,如3.2.第22中学所示。

3.2.4 此时有了PersonDAO的贯彻,进一步封装成可从来用的劳务。DBService.java 、DBServiceImpl.java:

public interface DBService{
    public List<Person> loadPersons();
}

@Service  //@Service用于标注业务层组件
@Transactional //@Transactional 可以作用于接口、接口方法、类以及类方法上。赋予其事务属性
public class DBServiceImpl implements DBService{
    @Autowired
    private PersonDAO personDAO;
    public List<Person> loadPersons(){
        return personDAO.getAll();
    }
}

于今,读写多少的功力有了。能够在Controller中调用服务读数据,QuizController.java:

@Controller
public class QuizController {
    @Resource  //与@Autowired等效,是JDK支持的注解,默认按照名称进行装配
    private DBService dbService;
    @PostConstruct  //使用@PostConstruct注释初始化方法。在Controller中,用@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次。
    private void initQuiz(){
        this.persons = dbService.loadPersons();
    }
}

3.2.5 把读取的剧情发给前端JSP页面。本文使用了三种方法,一是传json回去,二是一贯传对象回来。

方法一:传json到前者,用拼接字符串的艺术生成页面。这种方法很笨,当时知识面太窄。然则用json传数据在做多少可视化时比较方便,所以也保留了那一个代码。QuizController.java:

 @RequestMapping(value = "/loadPaper", method = RequestMethod.GET)
    @ResponseBody
    public byte[] loadPaper() throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonString = objectMapper.writeValueAsString(this.quiz);
        byte[] b = jsonString.getBytes("UTF-8");        //解决传到前端后中文乱码问题
        return b;
    }

在前面一个用js深入分析json,生成页面。问卷页面vote.jsp:

function loadPage(){
            $.getJSON("loadPaper",function(data){  //获取问卷数据quiz,放入data中
                var names = data.names;
                 for (var i=0; i< names.length; i  ){
                      var testDiv = '<div class="test">'   '<p class="name">'   (i 1)   ".&nbsp"   names[i]   ':</p>';
                      ...
                      $("form").append(testDiv);
                }
             }

方法二:借助ModelAndView对象,直接传对象到前面几个。合营JSP的特点,相比较优雅高效。QuizController.java中:

//在方法的参数列表中添加形参 ModelMap map, spring 会自动创建ModelMap对象。
//然后调用map的put(key,value)或者addAttribute(key,value)将数据放入map中,spring会自动将数据存入request。
public ModelAndView check(HttpServletRequest request, HttpServletResponse response, ModelMap model){
  model.addAttribute("persons", persons);  //添加名为persons的对象
            return new ModelAndView("result");   //返回页面result.jsp
}

在后边一个接纳JSTL <c:forEach>和EL表明式循环生成表格。展现成绩页面result.jsp:

        <c:forEach items="${persons}" var="person">
            <tr>
                <td>${person.id}</td>
                <td><a href="${person.id}/detail">${person.name}</a></td> <!--REST风格-->
                <td>${person.department}</td>
            </tr>
        </c:forEach>

(注意:使用EL表明式时,需参预<%@page isELIgnored="false" %>)

此地把各样人名作为一个超链接,点走入展现其测验评定结果。${person.id}/detail会产生如1/detail如此的地点。该地点在QuizController.java中那样解析:

@RequestMapping(value = "/{id}/detail", method = RequestMethod.GET)
    public ModelAndView detail(HttpServletRequest request, ModelMap model, @PathVariable String id) {
        Result result = dbService.getResultByID(id);
        String name = result.getName();
        model.addAttribute("name", name);
        return new ModelAndView("detail");
    }

3.2.6 扩大知识
上述传参情势叫REST( Representational State Transfer)风格。
关于SpringMVC应用REST风格,参考:Spring MVC 实现增加和删除改查 - CSDN博客
关于别的U奥迪Q7L传参方式,参谋: SpringMVC之@RequestParam @PathVariable对比
关于SpringMVC中种种常用传值方法,仿照效法:springMVC 将controller中数量传递到jsp页面

5、编写工具类 TreeNode.java 和  TreeUtil.java

你也许感兴趣的稿子:

  • ThinkPHP EasyUI之ComboTree中的会计科目树形菜单实现格局
  • 自在学习jQuery插件EasyUI EasyUI创立树形菜单

1. 图谋职业

  • 如何采用IDEA成立web工程,参谋:
    使用IntelliJ IDEA开发java web

  • 如何运用IDEA配置maven仓库,加速加载正视包的速度,参考:
    IDEA配置maven(配置Ali云中心库房)

7、编写前端代码

新伟德国际首页 1新伟德国际首页 2新伟德国际首页 3新伟德国际首页 4

新伟德国际首页 5

2、在叶子节点上右键出现转移菜单达成新增添、删除、修改操作;

本文由韦德国际1946英国发布于计算机网络,转载请注明出处:新伟德国际首页:无脑操作,基于EasyUI的基础之

关键词: 伟德国际网址 JavaWeb 学习

上一篇:php基于websocket搭建简易聊天室实践,WebSocket实现

下一篇:没有了