树形结构数据提交问题
(1)标记,关联工作在jsp中进行
基于树形结构提交数据的复杂关联问题一个控件的name,value无法包含所有关联信息,自身信息,故用隐藏域,
由于隐藏域是统统提交,所以用隐藏域value作为key,能获取被选中值的就是被选中了,
所以组织隐藏域和选择框数据的时候按照key-value-key-value(中间的key-value相同)
所有看有没有被选中的关键就在隐藏域提交所有的,通过request获取隐藏域作为值的value,能获取到的说明是选中的
组装时
1,只要按钮能get(K)到的就把当前遍历的menuId作为menuId,当前按钮value中带的部分信息作为value
2,没有按钮但是通过get(K)=1的说明是单个被选中页面
(2)直接就提交选中值,至于关联关系放到后台(查数据库)(这样对于树形结构的渲染(数据值的组织也简单))
1,提交的值父节点不是100000(排除文件夹)
2,提交的节点在menu表中找到(页面被选中)
3,提交的节点在menuLIst按钮表中被找到(按钮被选中)
即:A:遍历的是按钮被选中,把这个按钮的页面id同时查出(数据录增加菜单可以不用多查)(只管按钮)
B:遍历的是页面被选中(只管页面)
为了减少遍历数据库,可以在之中标记是哪级(页面,按钮,value=“100000;1”)或者在按钮级别标记其父(value=("100000;110000"))检测有;就是按钮级别,
没有;就是页面
先以所有的最外层作为key(遍历数据库现有的最外层),获取所有被选中的值,再像上面处理
request.getParameter(“外层Key”)
我这里只有页面和按钮有name
///////用$("<table></table>")这种方式根方便动态构建树。
树形结构选择中jsp提交数据,用的一个特性:同名的input(等一切域值,各种控件的)提交到后台会是一个用“,”隔开的字符串,
这种同名的域需要承接逗号分隔的值1,用模型驱动中的属性(可以是string,string[]),2,属性驱动(可以是String,String[]),3,如果用String[] a=request.getParameterValues("subsystem");
要有这种否则,用getparamet()只会是一个
比如下面示例:我这里只有页面和按钮有name(同一个大类的页面,按钮的name一样)
字符串初始化String[] a=new String[]{};
其他:
按装的第三方软件访问直接用ip+该软件的端口
通用mapper的插入操作自动是返回id的
opmRoleMapper.insert(role);
OpmRolelimit roleLimt1 = new OpmRolelimit();
roleLimt1.setRoleid(role.getId());
//@control层调用@service中的方法时不能传入request参数,否则调用不到(ServletReques也不行)
int updateRole(String organid,OpmRolelimit opmLimt,HttpServletRequest request) throws Exception;
类似角色权限这样第三方的维护应是先根据角色Id删除,然后根据角色id增加
示例:
jsp:================
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="../common/include.inc.jsp"%>
<c:import url="../common/pagerForm.jsp"></c:import>
<div class="pageContent">
<form method="post" action="<c:url value='/system/opmRole/update'/>" class="pageForm required-validate" onsubmit="return validateCallback(this,navTabAjaxDone);">
<input type="hidden" name="id" value="${vo.id}"/>
<input type="hidden" name="inUrl" value="${inUrl}"/>
<input type="hidden" name="roleId" value="${roleId}"/>
<input type="hidden" name="leave" value="${leave}"/>
<input type="hidden" name="pId" value="100000"/>
<input type="hidden" name="organid" value="${organid}"/>
<input type="hidden" name="pId1" value="100000"/>
<input type="hidden" name="pId1" value="110000"/>
<div class="pageFormContent" layoutH="57">
<fieldset>
<dl style="width: 23%">
<dt>所属市场:</dt>
<dd>${organName}</dd>
</dl>
<dl style="width: 33%">
<dt>名称:</dt>
<dd><input type="text" name="name" value="${vo.name}" class="required alphanumeric" maxlength="16"/></dd>
</dl>
<dl style="width: 44%">
<dt style="width: 14%">描述:</dt>
<dd style="width: 84%"><input type="text" name="memo" value="${vo.memo}" maxlength="100"/>最多100个汉字</dd>
</dl>
</fieldset>
<div id="div1" style="width:100%;float: left;" >
</div>
</div>
<div class="formBar">
<ul>
<li><div class="buttonActive"><div class="buttonContent"><button type="submit">保存</button></div></div></li>
<li><div class="button"><div class="buttonContent"><button type="button" class="reset">重置11</button></div></div></li>
<li><div class="button"><div class="buttonContent"><button type="button" class="close">关闭11</button></div></div></li>
<li><div class="button"><div class="buttonContent"><button type="button" onclick="appendTable();">test</button></div></div></li>
</ul>
</div>
</form>
</div>
<script type="text/javascript">
$(function(){
appendTable();
});
function appendTable() {
var roleId=$("input[name='roleId']").val();
var leave=$("input[name='leave']").val();
var pId=$("input[name='pId']").val();
var dataParent = {
roleId: roleId,
leave:leave,
pId:pId
};
$.ajax({
type: "post",
url: "${pageContext.request.contextPath}/system/opmRole/Auths",
data: dataParent,
success: function (data) {
if(data!=''&&data!=null){
var div1=$("#div1");
var table1=$("<table></table>");
var arr = eval(data);
for(j=0;j<arr.length;j++){
if(arr[j].leave=='1'){
var row =$("<tr></tr>");
var td =$("<td></td>");
td.append($(arr[j].str));
row.append(td);
table1.append(row);
}
var row2 ;
if(arr[j].leave=='2'){
row2 =$("<tr></tr>");
var td =$("<td></td>");
td.append(arr[j].str);
row2.append(td);
table1.append(row2);
}if(arr[j].leave=='3'){
var td =$("<td></td>");
td.append(arr[j].str);
table1.find("tr:last").append(td);
}
}
div1.html(table1);
}else{
alert("你输入的会员编号不存在!");
}
},
error:function(data){
alert("数据加载异常!");
}
});
}
//全选 选中多选框
function checkedAllBox(obj) {
if(obj.checked){
var a = document.getElementsByName(obj.value);
for (i = 0; i < a.length; i++) {
a[i].checked=true;
}
}else{
var a = document.getElementsByName(obj.value);
for (i = 0; i < a.length; i++) {
a[i].checked=false;
}
}
}
</script>
@control:================================
@SuppressWarnings("unused")
@RequestMapping(value = "/system/opmRole/update", method = RequestMethod.POST)
public ModelAndView opmUpdate(OpmRole opmRole,HttpServletRequest request,Model modle) throws Exception {
int flag=0;
OpmMenufolder folder = new OpmMenufolder();
folder.setParentid("100000");
List<OpmMenufolder> opmMenufolders= opmMenufolderService.getOpmMenufolder(folder);
String[] a=new String[]{};
List<String> list = new ArrayList<String>();
try{
for(OpmMenufolder o: opmMenufolders){
a=request.getParameterValues(o.getId());
if(a==null||"".equals(a)){
continue;
}
list.addAll(Arrays.asList(a));
}
Map<String,Object> param = new HashMap<String,Object>();
OpmRolelimit opmLimt = new OpmRolelimit();
String org= opmRole.getOrganid();
flag = opmRoleService.updateRole(opmRole, list);
//
return ajaxDoneOpm("/commonuntil/ajaxDone",200,"操作成功!","opmRoleNavUi","/system/opmRole/editUi","closeCurrent");
}catch (Exception e){
return ajaxDoneOpm("/commonuntil/ajaxDone",300,"添加失败!","opmRoleNavUi","/system/opmRole/editUi","closeCurrent");
//throw new Exception("操作失败!");
}
}
@SuppressWarnings("rawtypes")
@RequestMapping(value="/system/opmRole/Auths")
@ResponseBody
public JSONArray treeRead(@RequestParam(value="leave") String leave,@RequestParam(value="roleId") String roleId,@RequestParam(value="pId") String pId,@RequestParam(value="groupId",required=false) String groupId1){
List<String> strl= new ArrayList<String>();
String str="";
JSONArray JsonArray = new JSONArray();
Map<String,Object> param = new HashMap<String,Object>();
param.put("pId", pId);
List<Map> map= opmMenufolderService.getfordMenuLimt(param);
Map<String,Object> param1 = new HashMap<String,Object>();
String groupId=groupId1;
for(Map p: map){
param1.put("pId", p.get("ID"));
String l= (String) p.get("LEAVE");
if("1".equals(l)){
if("100000".equals(p.get("PARENTID")+"")){
groupId=(String)p.get("ID");
str+="<label style=\"float:left\"><input type=\"checkbox\" class=\"checkboxCtrl\" value="+p.get("ID")+" group="+groupId+" selectType=\"invert\" />"+p.get("NAME")+"</label>"+"\n";
strl.add(str);
JSONObject Json = new JSONObject();
Json.put("ID", p.get("ID")+"");
Json.put("NAME", p.get("NAME")+"");
Json.put("groupId", groupId);
Json.put("parentId", p.get("PARENTID"));
Json.put("leave", l);
Json.put("str", "<label style=\"float:left;width:150px;\"><input type=\"checkbox\" class=\"checkboxCtrl\" value="+p.get("ID")+" onclick=\"checkedAllBox(this);\" group="+groupId+" //>"+p.get("NAME")+"</label>"+"\n");
JsonArray.add(Json);
}else{
str+="<label><input type=\"checkbox\" value="+p.get("ID")+" name="+groupId+"/>"+p.get("NAME")+"</label>"+"\n";
strl.add(str);
JSONObject Json = new JSONObject();
Json.put("ID", p.get("ID")+"");
Json.put("NAME", p.get("NAME")+"");
Json.put("groupId",groupId);
Json.put("parentId", p.get("PARENTID"));
Json.put("leave", l);
Json.put("str","<label style=\"width:150px;\"> "+p.get("NAME")+"</label>"+"\n");
JsonArray.add(Json);
}
}
if("2".equals(l)){
if(Integer.valueOf(leave)<0){
if(Integer.valueOf(p.get("LEAVE1")+"") >=Integer.valueOf(leave)){
str+="<label><input type=\"checkbox\" value="+p.get("ID")+" name="+groupId+"/>"+p.get("NAME")+"</label>"+"\n";
strl.add(str);
JSONObject Json = new JSONObject();
Json.put("ID", p.get("ID")+"");
Json.put("NAME", p.get("NAME")+"");
Json.put("groupId", groupId);
Json.put("parentId", p.get("PARENTID"));
Json.put("leave", l);
Json.put("str","<label style=\"width:150px;\"> <input type=\"checkbox\" value="+p.get("ID")+" name='"+groupId+"'/>"+p.get("NAME")+"</label>"+"\n");
JsonArray.add(Json);
}
}else{
//TODO
Map<String,Object> param2 = new HashMap<String,Object>();
param2.put("menuItemId", p.get("ID"));
param2.put("menuItemLimitId", null);
param2.put("roleId", roleId);
param2.put("displayOrder", Integer.valueOf(-1));
List<OpmRolelimit> rl= opmRolelimitService.getRoleLimitByTJ(param2);
if(rl!=null&&rl.size()>0&&Integer.valueOf(p.get("LEAVE1")+"") >=Integer.valueOf(leave)){
str+="<label><input type=\"checkbox\" value="+p.get("ID")+" name="+groupId+"/>"+p.get("NAME")+"</label>"+"\n";
strl.add(str);
JSONObject Json = new JSONObject();
Json.put("ID", p.get("ID")+"");
Json.put("NAME", p.get("NAME")+"");
Json.put("groupId", groupId);
Json.put("parentId", p.get("PARENTID"));
Json.put("leave", l);
Json.put("str","<label style=\"width:150px;\"> <input type=\"checkbox\" value="+p.get("ID")+" name='"+groupId+"'/>"+p.get("NAME")+"</label>"+"\n");
JsonArray.add(Json);
}
}
}
if("3".equals(l)){
Map<String,Object> param2 = new HashMap<String,Object>();
param2.put("menuItemId", p.get("PARENTID"));
param2.put("menuItemLimitId", p.get("ID"));
param2.put("roleId", roleId);
param2.put("displayOrder", null);
List<OpmRolelimit> rl2= opmRolelimitService.getRoleLimitByTJ(param2);
String tempg=groupId;
if(rl2!=null&&rl2.size()>0){
str+="<label><input type=\"checkbox\" value="+p.get("ID")+" name="+groupId+"/>"+p.get("NAME")+"</label>"+"\n";
strl.add(str);
JSONObject Json = new JSONObject();
Json.put("ID", p.get("ID")+"");
Json.put("NAME", p.get("NAME")+"");
Json.put("groupId", groupId);
Json.put("parentId", p.get("PARENTID"));
Json.put("leave", l);
Json.put("str","<label style=\"width:150px;\"><input type=\"checkbox\" value="+p.get("ID")+" name='"+groupId+"'/>"+p.get("NAME")+"</label>"+"\n");
JsonArray.add(Json);
}
}
//str+=treeRead(leave,roleId,p.get("ID")+"",groupId);
JsonArray.addAll(treeRead(leave,roleId,p.get("ID")+"",groupId));
}
return JsonArray;
}
@service:=========================================
@Override
@Transactional(rollbackFor=Exception.class)
public int updateRole(OpmRole opmRole,List<String> list) throws Exception {
// TODO Auto-generated method stub
System.out.println("==========================213213213===================");
if("".equals(opmRole.getOrganid())||null==opmRole.getOrganid()){
throw new Exception("传入参数为空!");
}
TbCusMark tbCusMark = new TbCusMark();
tbCusMark.setMarketKey(BigDecimal.valueOf(Long.valueOf(opmRole.getOrganid())));
TbCusMark mark= tbCusMarkMapper.selectOne(tbCusMark);
if(mark==null){
throw new Exception("交易市场找不到!");
}
OpmRole role =new OpmRole();
if(opmRole.getId()==null||"".equals(opmRole.getId())){
role.setOrganid(opmRole.getOrganid());
role.setLevel1(Short.valueOf("0"));
role.setName(opmRole.getName());
role.setMemo(opmRole.getMemo());
opmRoleMapper.insert(role);
}else{
OpmRolelimit opmRolelimit = new OpmRolelimit();
opmRolelimit.setRoleid(opmRole.getId());
opmRolelimitMapper.deletRoleLimts(opmRolelimit);
}
OpmMenuitemlimit opmMenuitemlimit = new OpmMenuitemlimit();
List<OpmMenuitemlimit> opmLimits= opmMenuitemlimitMapper.select(opmMenuitemlimit);
OpmMenuitem item = new OpmMenuitem();
List<OpmMenuitem> items= opmMenuitemMapper.select(item);
try{
for(String l :list){
OpmRolelimit opmLimt = new OpmRolelimit();
int up=0;
for(OpmMenuitem i: items){
if(i.getId().equals(l)){
opmLimt.setMenuitemid(i.getId());
opmLimt.setDisplayorder(-1L);
opmLimt.setName("查看");
if(opmRole.getId()==null||"".equals(opmRole.getId())){
opmLimt.setRoleid(role.getId());
up= opmRolelimitMapper.insert(opmLimt);
}else{
opmLimt.setRoleid(opmRole.getId());
up= opmRolelimitMapper.insert(opmLimt);
}
break;
}
}
if(up==0){
for(OpmMenuitemlimit lm : opmLimits){
if(lm.getId().equals(l)){
opmLimt.setMenuitemid(lm.getMenuitemid());
opmLimt.setDisplayorder(lm.getDisplayorder());
opmLimt.setName(lm.getName());
opmLimt.setMenuitemlimitid(lm.getId());
opmLimt.setDisplayorder(lm.getDisplayorder());
opmLimt.setName(lm.getName());
String org= opmRole.getOrganid();
if(opmRole.getId()==null||"".equals(opmRole.getId())){
opmLimt.setRoleid(role.getId());
up= opmRolelimitMapper.insert(opmLimt);
}else{
opmLimt.setRoleid(opmRole.getId());
opmRolelimitMapper.insert(opmLimt);
}
break;
}
}
}
}
}catch(Exception e){
throw new Exception("保存角色异常!");
}
return 1;
}
相关推荐
在本文中,我们将深入探讨如何使用Ajax构建一个树形结构,这是一个常见的前端数据展示方式,尤其适用于层级关系的数据,如组织结构、目录树等。 首先,树形结构是一种数据表示形式,它通过节点之间的层次关系来组织...
- 加载数据:使用layui的API加载树形结构的数据,通常是从服务器获取JSON格式的数据,然后调用`layui.tree`方法生成树形结构。 - 绑定事件:监听用户的点击操作,通过`layui.form.on('select')`方法捕获选择变化,...
树形结构是一种数据组织形式,通过节点间的层级关系来表示数据。在本项目中,树形结构用于展现具有层级关系的数据,如部门、地区、产品类别等。用户可以展开和折叠节点,查看和选择不同级别的条目。 3. 搜索功能:...
本项目以"JSP动态树形结构、增删改查刷新功能(sql脚本)"为主题,结合DTree组件,构建了一个具有动态树形展示、数据增删改查以及自动刷新功能的系统。以下是这个项目中的关键知识点和相关技术的详细介绍: 1. **JSP...
这样的设计使得每个节点都可以通过其 `parentid` 字段关联到父节点,从而构建出一个完整的树形结构。 #### JSP 页面与 JavaBean 的交互 在 JSP 页面中,通过调用 JavaBean 来操作数据库。具体实现步骤如下: 1. *...
在本作业中,你将深入理解并实践树形结构,特别是二叉树的相关知识,包括它们的存储结构、遍历算法以及特殊性质的检测。以下是关于这些知识点的详细说明: 一、二叉树的存储结构 二叉树是一种特殊的树形数据结构,...
树形结构常用于展示具有层级关系的数据,例如组织架构、文件目录等。MiniUI提供了强大的树形组件,支持节点的动态加载、展开与折叠、节点操作(如添加、删除、编辑)以及异步数据获取。通过JSON格式的数据源,我们...
zTree是一款轻量级的JavaScript组件,它能够帮助开发者快速构建出功能丰富的树形结构,适用于网站导航、组织架构展示、文件管理等多种场景。在Bootstrap框架的加持下,zTree的外观和交互体验得到了显著提升,更加...
zTree是一款轻量级的JavaScript库,其主要功能是生成和管理树形结构,支持多种操作,包括展开/折叠节点、添加/删除节点、编辑节点文本等。zTree的灵活性和可定制性让它在各种项目中都得到了广泛应用。它的核心优势...
在IT领域,树形结构是一种重要的数据结构,广泛应用于计算机科学和软件工程中。本作业主要涉及二叉树的二叉链表存储、遍历算法以及相关应用。下面将详细阐述这些知识点。 首先,二叉树是一种特殊的树,每个节点最多...
6. **DOM操作**:使用JavaScript动态创建和修改DOM元素,将接收到的JSON数据转化为可视化的树形结构。这可能涉及到元素的插入、删除和更新。 7. **性能优化**:对于大规模的数据,要考虑到性能优化,如延迟加载(懒...
// 调用服务端方法获取数据并生成树形结构 $.ajax({ url: 'GetTreeViewData', type: 'POST', dataType: 'json', success: function (data) { // 生成树形结构的代码 } }); }); }); ``` 3. **服务器端代码...
在IT领域,尤其是在前端开发中,"树形的复选框"是一种常见的用户界面元素,它结合了树状数据结构和复选框的功能,让用户能够对分层数据进行选择和操作。这种设计允许用户逐级展开节点,查看并选择各个层次的选项。...
它基于一种特殊的二叉树结构——哈夫曼树(Huffman Tree),也被称为最优二叉树或最小带权路径长度树。在这个实验中,我们需要实现哈夫曼编码的全过程,包括字符频率统计、哈夫曼树构建、编码、解码以及压缩率计算。...
5. **树**:树形结构包括二叉树、二叉搜索树、平衡树(如AVL树和红黑树)等,它们在数据索引、文件系统等方面有广泛应用。 6. **图**:图由顶点和边构成,用于表示对象之间的关系,如网络路由、社交网络等。图的...
- **根节点(Root Node)**:树形结构的起始点,没有父节点。 - **父节点(Parent Node)**:拥有子节点的节点。 - **子节点(Child Node)**:属于某个父节点的节点,可以有多个。 - **叶子节点(Leaf Node)**...
这些数据将被转换成HTML,以便浏览器能够理解并渲染成树形结构。ASP中可以使用VBScript或JScript作为脚本语言,这里我们假设使用JScript,因为它与JavaScript语法相近。 在ASP页面中,我们可以使用内置的对象如...
数据库脚本用于创建、修改或删除数据库表结构,以便存储和管理树形结构的数据。JDBC(Java Database Connectivity)是Java平台的标准接口,用于连接Java应用程序和各种数据库。在树形控件的实现中,你可以编写JDBC类...
本指导书将引导学生进行一系列的数据结构实验,涵盖线性结构、树形结构、图结构以及查找排序等核心内容。 实验要求 1. **理解并掌握**:每个实验都要求学生理解相关数据结构的工作原理和操作方法。 2. **实现代码*...
在设计内容和要求方面,每个小组需要完成树形结构的设计,并提交一份全面的报告,涵盖课题的各个方面,如设计目的、内容、需求分析、概要设计、代码实现、测试结果、创新点以及个人体会。此外,每个成员还需提交个人...