- 浏览: 95765 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
抓不住的风316:
谢谢你的想法 让我从牛角尖中退了出来呵呵
超鏈接點擊次數的統計方法(超簡單) -
白色蜻蜓:
真是强人儿
UC++學習筆記代碼 -
myhongkongzhen:
RT kettas我這裡試驗室成功的,之前也是看了好多文章試驗 ...
win7下vm中linux網絡共享設置 -
kettas:
见过了,没有用过不晓得行不行。
win7下vm中linux網絡共享設置 -
lutian1984:
写的什么啊!有没有点正常人能看懂的东西啊
Struts2 + Pluto + portletV1.0(JSR 168) CRUD Demo
2009年5月10号 天气晴 星期日
以下用JAVA代码实现了带有checkbox级联选择子栏目的TREE列表功能,并结合数据库中查询到的文章栏目,组-文章栏目权限的相关信息,完成用户组添加,修改的功能,
treelist采用的是JAVASCRIPT实现,在此感谢原作者的代码共享,在下面提供下载。
代码只提供核心DEMO部分,大家需要经过与自己的代码结合,部分修改才能正常使用,为此带来的不便,深表歉意!
=========================我是分割线=======================
标签类代码:
package g.cms.web.tag; import g.cms.business.ArchiveTypeService; import g.sql.ConnectionPool; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Map; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * @author Jane(吴贞贞) * @email myhongkongzhen@gmail.com * @since JDK 1.6 * @alter 2009年5月10号 * @version 1.0 2009年5月8号 */ public class ArchiveTypeTreeManagerNewTag extends TagSupport { /** * */ private static final long serialVersionUID = 7735086372442764276L; private static final Log log = LogFactory .getLog(ArchiveTypeTreeManagerNewTag.class); private List<Integer> getGroupArticleTypeList(Integer retid) { String group_articleType_sql = "SELECT t.id,t.archivetypeid" + " FROM group_archivetype t WHERE GROUPID=?"; Connection con = null; try { con = ConnectionPool.getConnection(); con.setAutoCommit(false); PreparedStatement pst = con.prepareStatement(group_articleType_sql, Statement.RETURN_GENERATED_KEYS); pst.setInt(1, retid); ResultSet rs = pst.executeQuery(); List<Integer> groupArticleTypeList = new ArrayList<Integer>(); while (rs.next()) { groupArticleTypeList.add(rs.getInt("archivetypeid")); } log.debug("groupArticleTypeList Length : " + groupArticleTypeList.size()); con.commit(); return groupArticleTypeList; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } finally { if (con != null) try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } @Override public int doEndTag() throws JspException { // TODO Auto-generated method stub ArchiveTypeService archiveTypeSvr = new ArchiveTypeService(); List<Map<String, Object>> list = (List<Map<String, Object>>) archiveTypeSvr .query("select id,pid,name from archive_type order by id"); Integer retid = null; List<Integer> groupArticleTypeList = null; // retid = (Integer) // this.pageContext.getRequest().getAttribute("retid"); String retidStr = this.pageContext.getRequest().getParameter("groupid"); if (null == retidStr || "".trim().equals(retidStr) || "addFirst".trim().equals(retidStr)) { log.debug("FIRST INSERT GROUP-ARCHIVETYPE..."); } else { retid = Integer.parseInt(retidStr); log.debug("EDIT GROUP-ARCHIVETYPE... ID==>" + retid); groupArticleTypeList = getGroupArticleTypeList(retid); } JspWriter out = this.pageContext.getOut(); log.debug("构建树形列表。。。"); String typeidStr = null; try { out.println("<input type=\"button\" " + "value=\"确定\" onclick=\"sel()\" />"); out.println("<div id=\"systree\"></div>"); out.println("<script type=\"text/javascript\">"); out.println("function sel(){"); out.println("var selids=d.getCheckedNodes();"); out.println("var str=\"\";"); out.println("for(var n=0; n<selids.length; n++){"); out.println("str+=selids[n]+\";\";"); out.println("}"); // out.println("alert(str);"); // out.println("window.open(\"user!addGroup.do?typeids=\" + str+\" , // '_self'\");"); out.println("document.getElementById(\"typeids\").value=str"); out.println(" }"); out.println("var d = new dTree('d','/yppt/images/system/menu/');"); out.println("d.config.folderLinks=true;"); out.println("d.config.useCookies=false;"); out.println("d.config.check=true;"); // 子节点 父节点 NAME // d.add(0,-1,'系统菜单',"javascript:;",'提示'); // out.println("d.add(0,-1,'系统菜单',\"javascript:;\",'提示');"); // // d.add(100,0,'系统管理',"javascript:;",'所有系统管理功能'); // out.println("d.add(100,0,'系统管理',\"javascript:;\",'所有系统管理功能');"); // // d.add(790,100,'菜单管理',"javascript:;",'菜单管理'); // out.println("d.add(790,100,'菜单管理',\"javascript:;\",'菜单管理');"); // // d.add(800,100,'组织机构',"javascript:;",''); // out.println("d.add(800,100,'组织机构',\"javascript:;\",'');"); out.println("d.add(0,-1,'文章栏目列表',\"javascript:;\",'文章栏目列表')"); gotoTreeList(out, list); out.println("document.getElementById('systree').innerHTML = d;"); out.println("</script>"); if (null != groupArticleTypeList) { out.println("<script type=\"text/javascript\">"); String funcs = "var funcs = eval(\"(\"+\"{funcs:[{menudm:'0'},"; for (Integer groupArticleTypeID : groupArticleTypeList) { log.debug("[" + groupArticleTypeID + ",]"); // out.println("{menudm:'100'},{menudm:'790'},{menudm:'800'}," // + "{menudm:'810'}"); funcs += "{menudm:'" + groupArticleTypeID + "'},"; } funcs = funcs.substring(0, funcs.length() - 1); funcs += "]}\"+\")\");"; out.println(funcs); out.println("for(var n=0; n<funcs.funcs.length;n++){"); out.println("d.co(funcs.funcs[n].menudm).checked=true;"); out.println("}"); // var funcs = // eval("("+"{funcs:[{menudm:'0'},{menudm:'100'},{menudm:'790'}, // {menudm:'800'},{menudm:'810'}]}"+")"); // for(var n=0; n<funcs.funcs.length;n++){ // d.co(funcs.funcs[n].menudm).checked=true; // } out.println("</script>"); } log.debug("树形列表构建成功。。。"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return this.EVAL_PAGE; } private void gotoTreeList(JspWriter out, List<Map<String, Object>> list) { try { List<java.util.Map> tree = new LinkedList<java.util.Map>(); List temp = new LinkedList<java.util.Map>(); for (java.util.Map row : list) { if (row.get("pid") == null || row.get("pid").toString().equals("")) { tree.add(row);// 最終欄目,沒有pid的 } else { temp.add(row); // 有pid的欄目 } list = temp; } for (java.util.Map node : tree) { String idStr = (node.get("id")).toString(); Integer value = Integer.parseInt(idStr); String label = (String) node.get("name"); // 子节点 父节点 NAME // d.add(100,0,'系统管理',"javascript:;",'所有系统管理功能'); // // d.add(790,100,'菜单管理',"javascript:;",'菜单管理'); // // d.add(800,100,'组织机构',"javascript:;",''); out.println("d.add(" + value + ",0,'" + label + "',\"javascript:;\",'" + label + "')"); platToHierarchical(node, " ", out, list); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 平铺数据转化为层次数据--遍历子节点 */ @SuppressWarnings("unchecked") private void platToHierarchical(Map node, String space, JspWriter out, List<Map<String, Object>> list) throws IOException { List<Map> children = findChildren(node.get("id").toString(), list); List<Integer> tid = new ArrayList<Integer>(); for (int i = 0; i < children.size(); i++) { Map child = children.get(i); String idStr = (child.get("id")).toString(); Integer id = Integer.parseInt(idStr); String pidStr = (child.get("pid")).toString(); Integer pid = Integer.parseInt(pidStr); String name = (String) child.get("name"); tid.add(id); // 子节点 父节点 NAME // d.add(100,0,'系统管理',"javascript:;",'所有系统管理功能'); // // d.add(790,100,'菜单管理',"javascript:;",'菜单管理'); // // d.add(800,100,'组织机构',"javascript:;",''); out.println("d.add(" + id + "," + pid + ",'" + name + "',\"javascript:;\",'" + name + "')"); platToHierarchical(child, space + " ", out, list); } } /** * 平铺数据转化为层次数据--查找子节点 */ @SuppressWarnings("unchecked") private List findChildren(String parentId, List<Map<String, Object>> list) { List<java.util.Map> result = new LinkedList<java.util.Map>(); List temp = new LinkedList<java.util.Map>(); for (java.util.Map row : list) { if (row.get("pid").toString().equals(parentId)) { result.add(row); } else { temp.add(row); } list = temp; } return result; } }
=========================我是分割线=======================
STRUTS2的action代码:
public String editGroup() { Object autoIncKeyFromApi = -1; setOperate("修改用户组"); setOperateInfo("用户组已修改"); addLink("editGroup", new Link("返回用户组列表", "user!queryGroup.do")); Connection con = null; try { con = ConnectionPool.getConnection(); con.setAutoCommit(false); SysconfigGroup group = new SysconfigGroup(); group.setName(request.getParameter("name")); group.setRemark(request.getParameter("remark")); group.setArctypeadd(getParameterInteger("arctypeadd")); group.setArctypedel(getParameterInteger("arctypedel")); group.setArctypeedit(getParameterInteger("arctypeedit")); group.setArctypesee(getParameterInteger("arctypesee")); group.setArcadd(getParameterInteger("arcadd")); group.setArcdel(getParameterInteger("arcdel")); group.setArcedit(getParameterInteger("arcedit")); group.setArcsee(getParameterInteger("arcsee")); // UserGroupService service = new UserGroupService(); String group_sql = "update sys_group set name=?,remark=?,arctypeadd=?,arctypedel=?," + "arctypeedit=?,arctypesee=?,arcadd=?,arcdel=?,arcedit=?,arcsee=? " + " where id=?"; PreparedStatement pst = con.prepareStatement(group_sql, Statement.RETURN_GENERATED_KEYS); // int retid = 0;// = service.insert(group); pst.setString(1, group.getName()); pst.setString(2, group.getRemark()); pst.setInt(3, group.getArctypeadd()); pst.setInt(4, group.getArctypedel()); pst.setInt(5, group.getArctypeedit()); pst.setInt(6, group.getArctypesee()); pst.setInt(7, group.getArcadd()); pst.setInt(8, group.getArcdel()); pst.setInt(9, group.getArcedit()); pst.setInt(10, group.getArcsee()); SysconfigGroupService service = new SysconfigGroupService(); SysconfigGroup g = service.get(new Integer(request .getParameter("id"))); pst.setInt(11, g.getId()); pst.executeUpdate(); String typeidsPr = request.getParameter("typeids"); typeidsPr = typeidsPr.substring(2, typeidsPr.length()); String[] typeids = typeidsPr.split(";"); log.debug(Arrays.toString(typeids)); Integer retid = g.getId(); request.setAttribute("retid", retid); // String group_articleType_sql = "SELECT t.id,t.archivetypeid" // + " FROM group_archivetype t WHERE GROUPID=?"; // pst = null; // pst = con.prepareStatement(group_articleType_sql, // Statement.RETURN_GENERATED_KEYS); // pst.setInt(1, g.getId()); // ResultSet rs = pst.executeQuery(); // List<Integer> groupArticleTypeList = new ArrayList<Integer>(); // while (rs.next()) { // groupArticleTypeList.add(rs.getInt("archivetypeid")); // } // log.debug("groupArticleTypeList Length : " // + groupArticleTypeList.size()); // request.setAttribute("groupArticleTypeList", // groupArticleTypeList); if (typeids != null && typeids.length != 0) { String delSql = "delete from group_archivetype where groupid=?"; pst = null; pst = con.prepareStatement(delSql, Statement.RETURN_GENERATED_KEYS); pst.setInt(1, g.getId()); pst.executeUpdate(); log.debug("DELETE GROUP ARCHIVETYPE SUCCESS!"); log.debug("UPDATE GROUP ARCHIVETYPE ..."); String sql = "insert into group_archivetype(id,groupid,archivetypeid) values(" + "(select (nvl(max(to_number(id)), 0)) from group_archivetype)+1,{0},{1})"; int i = 1; for (String t : typeids) { String tmp = MessageFormat.format(sql, retid, Integer .parseInt(t)); pst = null; pst = con.prepareStatement(tmp, Statement.RETURN_GENERATED_KEYS); pst.executeUpdate(); i++; } log.info("影响了" + i + "行"); } con.commit(); } catch (Exception e) { e.printStackTrace(); log.error(e); setOperateInfo("用户组修改失败"); setException(getStackTrace(e, null)); try { con.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } } finally { if (con != null) try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } return INPUT; }
=========================我是分割线=======================
<web4j:ArchiveTypeTreeManagerNewTag />
=========================我是分割线=======================
效果图如下 :
=========================我是分割线=======================
=========================我是分割线=======================
treelist的JAVASCRIPT脚本文件下载:
发表评论
-
substring与split的效率问题
2014-07-04 16:21 1869/** * demo */ package dem ... -
JAVA內存引用的理解
2012-06-19 10:12 7422012年6月19日10:08:02 源碼: ... -
對JAVA引用的一點理解
2012-05-31 23:14 7942012年5月31日23:06:13 ... -
List、Set等類存儲JavaBean的簡單排序實現
2010-06-12 09:44 1092列表排序常用操作: 1、Model類 implements ... -
TOMCAT配置文件配置字符編碼
2010-01-19 15:23 2641TOMCAT配置文件配置字符編碼 總是忘記這兩個參數, ... -
struts2得到request對象
2009-12-23 11:25 9602009年12月23號 週三 天氣晴 struts2得 ... -
JDBC鏈接access數據庫不同機器配置產生亂碼解決方案
2009-09-28 16:54 11822009年9月28號 天氣小雨 週一 JDBC鏈接 ... -
超鏈接點擊次數的統計方法(超簡單)
2009-08-25 11:24 63362009年8月25號 天氣晴 週二 今天一個靈感, ... -
类似GOOGLE,BAIDU的WEB应用PAGE分页标签JAVA实现
2009-05-09 13:42 27952009年5月9号 星期六 天气晴 以 ... -
ACCESS数据库资源导入到ORACLE数据库表中的实现
2009-05-08 11:33 15882009年5月8号 天气晴 星期五 以下 ... -
根据 crazycode的建议,修改通过IP控制权限访问网站的部分代码
2009-05-07 18:43 11822009年5月7号 根据crazycode前辈的 ... -
网站访问通过IP(段)作为限制条件的实现方法
2009-05-07 16:32 45042009年5月7号 星期四 天气晴 ... -
nutch搜索引擎windows版本,包含中文分词技术
2009-05-05 11:40 33212009年5月5日 星 ...
相关推荐
带CheckBox和级联操作的Tree 带CheckBox和级联操作的Tree 带CheckBox和级联操作的Tree
在前端开发中,CheckBox Tree(复选框树)是一种常见的组件,用于展示具有层级关系的数据,并支持用户进行多级选择。这个"纯JS+HTML写的checkBox Tree 级联选中"实例,解决了其他示例中可能存在的BUG,提供了一个...
使用javascript实现checkbox级联选择
"Flex Tree + Checkbox级联勾选"是一个重要的功能点,通常出现在数据管理、配置界面或文件管理系统中,允许用户进行批量选择或级联操作。 首先,我们来详细了解一下Flex Tree。Flex Tree是基于Adobe Flex技术的一种...
在ExtJS库中,Tree组件允许我们展示和操作数据以树形结构显示,而级联选择功能则意味着当用户选择一个节点时,它的所有子节点也会被自动选中,反之亦然,如果取消选中父节点,其所有子节点也将被取消选中。...
flex tree+checkbox可实现级联勾选 修改后 修改CheckTreeDemoRenderer.as这个文件中 while (!cursor.afterLast){ if (cursor.current.@state == STATE_CHECKED) { noChecks++; }else if (cursor.current.@state =...
在IT领域,"带checkbox的树"(Checkbox Tree)是一种常见的UI组件,广泛应用于数据管理和配置界面中。这种组件结合了树形结构和复选框的功能,用户可以通过选择或取消选择节点来对数据进行多选操作,使得在层级关系...
实现树形菜单的CheckBox级联选择功能是增强用户交互性的重要手段,它允许用户通过选择一个节点来自动选中或取消选中其所有子节点,以及可能的父节点。这个特性通常在多级选择场景中非常有用。 首先,我们要理解`...
总结来说,Java 中实现带复选框的树(CheckBox Tree)需要自定义 TreeNode 类(CheckBoxTreeNode),用于存储结点是否被选中的状态,并实现选中/取消选中时子结点和父结点的状态更新。同时,还需要创建一个 ...
在本文中,我们将深入探讨如何在Flex中实现CheckBoxTree,以及相关的关键技术点。 首先,我们需要了解Flex的基本概念。Flex是一个用于构建富互联网应用(RIA)的开源框架,它基于ActionScript编程语言和MXML标记...
在本文中,我们将深入探讨如何使用jQuery和EasyUI库实现一个具有级联选中功能的CheckBoxTree组件。CheckBoxTree是一种常见的UI元素,常用于展示层级结构的数据,并允许用户通过复选框选择或取消选择整条数据路径。在...
"checkbox 用shift键 级联选择"这个话题涉及到一种提高用户效率的交互设计,它允许用户通过按下Shift键快速选择一系列连续的复选框(checkboxes)。在网页或应用程序中,复选框通常用于让用户在多个选项中进行多选。...
ExpandAbleListView+checkbox数组方式级联,外层列表可展开收起,内层列表使用checkbox多选框,点击之后可在顶部的gridlayout显示,顶部显示的选中与checkbox选中状态关联,点击顶部选中的item,可取消选中状态,...
10. **编程语言与框架**:CheckBoxTree可以使用多种编程语言实现,如JavaScript(搭配React、Vue或Angular等前端框架)、Java(在Swing或JavaFX中)、C#(在WPF或WinForms中)等。每种语言和框架都有其特定的实现...
本篇文章将详细讲解如何在 Laravel-Admin 中使用 "CheckboxTree" 组件,这是一个用于实现树状复选框功能的插件,特别适合处理涉及多级分类或权限分配的问题。 首先,我们需要了解 "CheckboxTree" 的基本概念。在 ...
ExtJs4 Checkbox Tree是基于ExtJs 4框架实现的一种特殊树形组件,它在传统的树形结构基础上增加了复选框功能。这种组件常用于需要用户多选树形数据的场景,比如权限设置、目录选择等。下面将详细介绍ExtJs4 Checkbox...
在实际应用中,我们经常需要处理树形结构的复选框,实现级联选择功能,即当父节点被选中时,其所有子节点自动被选中,反之亦然。这篇博客“Ext TreePanelrcheckbox级联选择的实现”就专注于探讨这个主题。 首先,...