树形结构的jsp展现
100000 根文件夹
110000 一级文件夹
110200 二级文件夹
最简单可以用ztree等控件
select * from
(
/*select '权限树' name,'0' id,'-1' parentid from dual */
select t.name name,t.id id,t.parentid parentid ,'1' leave from opm_menufolder t
union all select o.name name,o.id id,o.menufolderid,'2' leave from opm_menuitem o
union all select l.name name,l.id id,l.menuitemid ,'3' leave from opm_menuitemlimit l
)
start with parentid is null connect by prior id=parentid ORDER BY leave
按级别展现可以的,这种一次性查出来,对于有规律的数据结构还好(位数层级识别),可以在后台渲染好,js中渲染好,对于没有规律的不好做标记,
http://zhoujingxian.iteye.com/blog/935660
类似上述网站的jsp不好渲染(没有特殊的控件的话),有没有规律的数据可以后台用迭代递归查询,每次递归的时候打标签----这就是迭代和sql比的好处
如下:
select * from (select * from
(
/*select '权限树' name,'0' id,'-1' parentid from dual */
select t.name name,t.id id,t.parentid parentid ,'1' leave from opm_menufolder t
union all select o.name name,o.id id,o.menufolderid,'2' leave from opm_menuitem o
union all select l.name name,l.id id,l.menuitemid ,'3' leave from opm_menuitemlimit l
)
start with parentid is null connect by prior id=parentid ORDER SIBLINGS BY parentid) where parentid='100000'
迭代中的变量是,自动会每次一个新的在回调的时候就一个个找到之前的变量,这样就可以组合累加了
========================
代码:
Control
@RequestMapping(value="/system/opmRole/editUi")
public String editUi(OpmRoleVo opmRole,HttpServletRequest request,Model modle) {
Map<String,Object> paramq = new HashMap<String,Object>();
paramq.put("pId", "100000");
String str0="";
String str= treeRead(paramq);//这个在页面的时候用ajax请求
System.out.println(str);
return "/system/opmUser/editUi";
}
@SuppressWarnings("rawtypes")
@RequestMapping(value="/system/opmRole/Auths")
@ResponseBody
public String treeRead(Map<String,Object> param){
String str="";
List<Map> map= opmMenufolderService.getfordMenuLimt(param);
Map<String,Object> param1 = new HashMap<String,Object>();
for(Map p: map){
str+=p.get("ID")+"="+p.get("NAME")+"\n";
param1.put("pId", p.get("ID"));
str+=treeRead(param1);
}
return str;//直接组装树形数据
}
Service:
@Override
public List<Map> getfordMenuLimt(Map<String,Object> param) {
// TODO Auto-generated method stub
List<Map> map = new ArrayList<>();
map= (List<Map>) opmMenufolderMapper.getfordMenuLimt(param);
return map;
}
OpmMenufolderMapper .java
public interface OpmMenufolderMapper extends Mapper<OpmMenufolder> {
List<?> getfordMenuLimt(Map<String,Object> param);
}
mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.esteel.system.mapper.OpmMenufolderMapper" >
<resultMap id="BaseResultMap" type="com.esteel.system.bean.OpmMenufolder" >
<!--
WARNING - @mbggenerated
-->
<id column="ID" property="id" jdbcType="VARCHAR" />
<result column="NAME" property="name" jdbcType="VARCHAR" />
<result column="DISPLAYORDER" property="displayorder" jdbcType="DECIMAL" />
<result column="PARENTID" property="parentid" jdbcType="VARCHAR" />
<result column="URI" property="uri" jdbcType="VARCHAR" />
<result column="DESCRIPTION" property="description" jdbcType="VARCHAR" />
<result column="ICONCSS" property="iconcss" jdbcType="VARCHAR" />
<result column="SUBSYSTEM" property="subsystem" jdbcType="VARCHAR" />
</resultMap>
<select id="getfordMenuLimt" resultType="map" parameterType="map">
select * from (select * from
(
select t.name name,t.id id,t.parentid parentid ,'1' leave from opm_menufolder t
union all select o.name name,o.id id,o.menufolderid,'2' leave from opm_menuitem o
union all select l.name name,l.id id,l.menuitemid ,'3' leave from opm_menuitemlimit l
)
start with parentid is null connect by prior id=parentid ORDER SIBLINGS BY parentid) where parentid=#{pId}
</select>
</mapper>