easyui的加载
来源:互联网 发布:开源需求管理 php 编辑:程序博客网 时间:2024/06/09 14:05
对于一些信息的展示,光用列表展示出来利用层级查询并不能给用户特别直观的感受,这时候我们利用tree型结构达到对用户体验效果的提升。(该文着重分析
easyuitree的展示)。
首先,我们设计一个节点类,将其属性进行封装整理。大概属性如下:
package com.szmz.csmp.vo;import java.io.Serializable;import java.util.List;public class EasyUiTreeVO implements Serializable {/** * */private static final long serialVersionUID = 2522698711285809086L;private Integer id; //菜单ID private String text; //菜单显示名称 private Boolean checked = false; //是否选中 private List<EasyUiTreeVO> children; //子节点 private Integer rank;//层级 private Integer parentId;//父类节点id private String state;//节点状态 public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getText() {return text;}public void setText(String text) {this.text = text;}public Boolean getChecked() {return checked;}public void setChecked(Boolean checked) {this.checked = checked;}public List<EasyUiTreeVO> getChildren() {return children;}public void setChildren(List<EasyUiTreeVO> children) {this.children = children;}public Integer getRank() {return rank;}public void setRank(Integer rank) {this.rank = rank;}public Integer getParentId() {return parentId;}public void setParentId(Integer parentId) {this.parentId = parentId;}public String getState() {return state;}public void setState(String state) {this.state = state;}}
前台代码很简单,通过接收后台传来的jsonArray直接刷出来即可。
<script> $('#tt').tree({ url: 'evaluatManageAction.do?method=loadEvaluat&year='+year, onClick:function(node){ var url="evaluatManageAction.do?method=toDetail&id="+node.id+"&rank="+node.rank; $('#sysframe').attr('src',url); } }); </script> <ul id="tt" class="easyui-tree" data-options="state:'closed'"> </ul>
接着就是在后台把这个树架起来通过jsonArray格式传过来了。
Action中代码如下:
/** * 加载树 * @return * @throws Exception */public void loadEvaluat(ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception {DataRecord dataRecord =getDataRecord(request);dataRecord.setString("status", "5");//加载的树 必须状态为 已备案的,删除的 不显示List<EasyUiTreeVO> list = evaluatManageService.loadEvaluat(dataRecord);if(null!=list &&list.size()>0){//判断是否为空,若为空则创建一个根节点传出JSONArray jsonArray =JSONArray.fromObject(list);response.setCharacterEncoding("utf-8");response.setContentType("application/json");System.out.println(jsonArray.toString());String data = jsonArray.toString();System.out.println(data);response.getWriter().write(data);response.getWriter().flush();response.getWriter().close();}else{ //这块就不做过多解释了List<EasyUiTreeVO> volist = new ArrayList<EasyUiTreeVO>();JSONObject jsonObj = new JSONObject();JSONArray jsonArray =JSONArray.fromObject(volist);response.setCharacterEncoding("utf-8");response.setContentType("application/json");System.out.println(jsonArray.toString());String data = jsonArray.toString();System.out.println(data);response.getWriter().write(data);response.getWriter().flush();response.getWriter().close();}}
service方法如下:
/** * 获取组装好的树 */public List<EasyUiTreeVO> loadEvaluat(DataRecord dataRecord){List<CsmpPeIndex> list = evaluatManageDao.getCsmpPeIndexTree(dataRecord);List<EasyUiTreeVO> tree1 = groupList(list,3);List<EasyUiTreeVO> tree2 = groupList(list,2);List<EasyUiTreeVO> tree3 = groupList(list,1);List<EasyUiTreeVO> tree4 = groupList(list,0);List<EasyUiTreeVO> test1 =createMenuTree(tree2,tree1);List<EasyUiTreeVO> rootTree =createMenuTree(tree3,tree2);if(null!=tree4 &&tree4.size()>0){if(null!=rootTree&&rootTree.size()>0){rootTree.get(0).setText(tree4.get(0).getText());}else{rootTree = new ArrayList<EasyUiTreeVO>();EasyUiTreeVO vo = new EasyUiTreeVO();if(null!=tree4.get(0)&&null!=tree4.get(0).getChildren()&&tree4.get(0).getChildren().size()>0){vo.setId(tree4.get(0).getChildren().get(0).getId());}vo.setText(tree4.get(0).getText());vo.setRank(0);rootTree.add(vo);}}else{if(null!=rootTree &&rootTree.size()>0){List<CsmpPeIndex> rootList = evaluatManageDao.getCsmpPeIndexByYear(rootTree.get(0).getId().toString(), dataRecord.getString("year"));rootTree.get(0).setText(rootList.get(0).getIndexName());}}return rootTree;}
其中调用到两个方法groupList和createMenuTree。
groupList作用是对同一层级的节点的基本信息与上级节点关联组装
createMenuTree是将groupList整理后的一个节点集合及上级节点集合进行关联组装
所以这两个方法都是从下级到上级加载的,如果改变顺序可能会出现组装混乱。
先是groupList方法:
/** * @param list 节点的基本信息 * @param rank 层级(实体中取得) * @return */public List<EasyUiTreeVO> groupList(List<CsmpPeIndex> list,int rank){if(null==list||list.size()==0){return null;}Map<String,List> map = new HashMap<String,List>(); List<EasyUiTreeVO> headList = new ArrayList<EasyUiTreeVO>(); for(int i=0;i<list.size();i++){ CsmpPeIndex csmpPeIndex = (CsmpPeIndex)list.get(i); if(new Integer(csmpPeIndex.getIndexType()).intValue()==rank){ String name = csmpPeIndex.getParentIndex(); //上级节点id /***层级为root节点时特殊处理***/ if(0==rank){ name=csmpPeIndex.getParentIndex()+"-"+csmpPeIndex.getIndexName(); } if(map.containsKey(name)){//在map中搜寻是否已经创建节点集合,如果有,在该集合中添加该类的节点 EasyUiTreeVO treeVO = new EasyUiTreeVO(); treeVO.setId(new Integer(csmpPeIndex.getIndexId())); if(StringUtils.hasText(csmpPeIndex.getIndexScore()) && rank > 2){ treeVO.setText(csmpPeIndex.getIndexName()+"("+csmpPeIndex.getIndexScore()+")"); }else{ treeVO.setText(csmpPeIndex.getIndexName()); } treeVO.setRank(new Integer(csmpPeIndex.getIndexType())); treeVO.setParentId(new Integer(csmpPeIndex.getParentIndex())); map.get(name).add(treeVO); }else{ List<EasyUiTreeVO> uiList = new ArrayList();//建立一个集合,把兄弟元素归类,先存一个。 EasyUiTreeVO data = new EasyUiTreeVO(); data.setId(new Integer(csmpPeIndex.getIndexId())); if(StringUtils.hasText(csmpPeIndex.getIndexScore()) && rank > 2){ data.setText(csmpPeIndex.getIndexName()+"("+csmpPeIndex.getIndexScore()+")"); }else{ data.setText(csmpPeIndex.getIndexName()); } data.setRank(new Integer(csmpPeIndex.getIndexType())); uiList.add(data); map.put(name,uiList); } } }for (String key : map.keySet()) {EasyUiTreeVO headVO = new EasyUiTreeVO(); /***层级为root节点时特殊处理***/if(key.indexOf("-")>0){String[] values= key.split("-");headVO.setId(new Integer(values[0]));headVO.setText(values[1]);}else{ headVO.setId(new Integer(key));}/******/ // headVO.setId(new Integer(key)); headVO.setChildren(map.get(key)); headList.add(headVO);}return headList;}再是createMenuTree方法:
/** * 将两个层级的节点拼装 * @param list * @param list2 * @return */ public List<EasyUiTreeVO> createMenuTree(List<EasyUiTreeVO> list, List<EasyUiTreeVO> list2) { if (null == list || list.size() == 0 || null == list2 || list2.size() == 0) { return null; } for (EasyUiTreeVO uitree : list) { if (null != uitree.getChildren() && uitree.getChildren().size() > 0) { List<EasyUiTreeVO> listRemove = new ArrayList<EasyUiTreeVO>(){}; for (EasyUiTreeVO uiTreeVO : uitree.getChildren()) { int score = 0; for (EasyUiTreeVO tree : list2) { if (uiTreeVO.getId().equals(tree.getId())) { uiTreeVO.setChildren(tree.getChildren()); for (EasyUiTreeVO voTreeScore : tree.getChildren()) { if (StringUtils.hasText(voTreeScore .getParentCode())) { if (voTreeScore.getParentCode() .indexOf("-") == -1) { score = score + Integer.parseInt(voTreeScore .getParentCode()); } } } uiTreeVO.setText(uiTreeVO.getText() + "(" + score + ")"); uiTreeVO.setParentCode(String.valueOf(score)); } } if(score == 0){//如果没有子项就remove掉 listRemove.add(uiTreeVO); } } //开始remove if(null!=listRemove && listRemove.size() > 0){ for (EasyUiTreeVO removeVO : listRemove) { uitree.getChildren().remove(removeVO); } } } } return list; }效果如下:
这是本人接触的第一个树形结构展示的案例,若有不足或改进之处还望各位大神指点。
本文介绍展现方式适用于数据量小的情况,若数据量过大页面加载时间过长,给用户体验效果并不理想。下一篇介绍如何解决这一问题
0 0
- easyui的加载
- easyui的异步加载
- easyui datagrid 的数据加载
- easyui datagrid 的数据加载
- Jquery easyui的加载方式
- easyui datagrid 的数据加载
- easyui datagrid的加载过程
- EasyUi的datagrid数据加载
- easyui的异步tree加载
- easyui 加载
- easyui的datagrid的js加载
- JQuery EasyUI 的加载等待效果....
- JQuery EasyUI 的加载等待效果....
- JQuery EasyUI 的加载等待效果....
- jquery easyui datagrid 两次加载的问题
- easyui datagrid 加载php的数组
- JQuery EasyUI 的加载等待效果....
- 再次谈谈easyui datagrid 的数据加载
- Android中Context的理解与使用技巧
- 在ROS中开始自主机器人仿真
- oracle RMAN参数配置详解
- Problem C: 学生干部虚基类
- KinectFusion官方文档翻译
- easyui的加载
- Android 代码混淆
- Java程序打包成jar包
- 【Unet】不使用NetWorkTransform组件 进行同步位移和旋转
- LVS搭建教程
- (工具类)double类型数据运算解决进度不准问题
- Problem D: 选举班干部了!
- java中的正则表达式
- 解决Android Studio下Android Device Monitor中Perspective列表不全的问题