程序开发中,很多地方都需要有用到“树”行结构的菜单。这里介绍的是一个jQuery的插件jsTree。 功能: 支持HTML、JSON、XML格式数据源 支持AJAX异步获取节点数据 自定义节点类型,并可指定icon 支持使用cookies来保存树的状态 支持拖拽、直接编辑、键盘快捷键、搜索等 缺点: 双击节点无法展开 获取选中节点ID时,如果父节点有选中,则无法获得该节点下选中的子节点的ID 异步获取下级节点时,如果使用搜索功能,会把所有节点都搜索一遍,即会去将所有的节点都取出来 对于JSON格式数据源,虽然有attr:{id:”node_identificator”,some-other-attribute:”attribute_value”},但其实这里好像只有id这一个会有用 对于checkbox,无法直接在返回的数据中指定选中状态 下面的代码就是解决checkbox初始化选中状态,以及获取“树”中所有全选中状态节点的ID,如果同时需要获取半选中状态的节点ID,则需要修改源代码。 先构造一个html data的“树”行菜单,这使用默认的主题,及html_data、checkbox、ui三个插件。 <script type=”text/javascript”> $(function(){ var checkNodeIds = “11″.split(“,”);//需要选中的节点ID,为数组 $(“#roleTree”).bind(‘loaded.jstree’, function (e, data) { $(“#roleTree”).jstree(“open_all”); $(“#roleTree”).find(“li”).each(function() { for (var i = 0; i < checkNodeIds.length; i++) { if ($(this).attr(“id”) == checkNodeIds[i]) { //如果节点的ID等于checkNodeIds[i],表示要选中 //alert($(this).attr(“id”)); $(“#roleTree”).jstree(“check_node”, $(this)); break; } } }); }).jstree({ [...]
页面testCheckbox.jsp代码: <input name="test" type="checkbox" checked="checked" value="1"/> <input name="test" type="checkbox" value="2"/> <input name="test" type="checkbox" checked="checked" value="3"/> 页面数据接收action:TestCheckboxAction.action 1、struts接收页面上一列checkbox选择结果 在TestCheckboxAction.action中使用private int[] test;定义一个数组并定义起对应的get/set方法,来处理页面传来的数据,对应页面中name为test的checkbox。 此时在action中System.out.print(Arrays.asList(test).toString());,可以看到控制台输出为[1,3],表明当前选中的是1和3。而如果database中要同时记录这三个checkbox的选择情况,该如何处理? 可以另外定义一个长度为3的数组,checkbox[] = {"0", "0", "0};,根据页面选择的情况更改checkbox的值。 if (null != getTest()) { for (int d : getTest()) checkbox[d - 1] = "1"; } 2、页面显示数据库中对checkbox的记录 <s:checkboxlist list="{’1′,’2′,’3′}" value="testList" theme="simple" name="test" /> 在TestCheckboxAction.action定义List<String> testList来记录数据库的查询结果,此时testList的长度应该为3。