请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

jeesite

 找回密码
 注册新会员
查看: 1449|回复: 3

【jeesite之BUG修复系列】三、角色修改页面获取部门错误

[复制链接]
来啊互相伤害啊 发表于 2016-12-24 23:02:03 | 显示全部楼层 |阅读模式
【jeesite之BUG修复系列】三、角色修改页面获取部门错误

        错误现象:在列表看到角色所在部门跟点击编辑后看到的部门不一致。
事实上,管理员点击角色修改页面不论是哪个角色详情都只是看到管理员自己所在的部门。
这是jeesite的一个BUG
  1.         @RequiresPermissions("sys:role:view")
  2.         @RequestMapping(value = "form")
  3.         public String form(Role role, Model model) {
  4.                 if (role.getOffice()==null){
  5.                         role.setOffice(UserUtils.getUser().getOffice());
  6.                 }
  7.                 model.addAttribute("role", role);
  8.                 model.addAttribute("menuList", systemService.findAllMenu());
  9.                 model.addAttribute("officeList", officeService.findAll());
  10.                 return "modules/sys/roleForm";
  11.         }
复制代码

目前是判断如果获取不到角色所在部门,则用当前用户部门代替。在我看来是不太合适的。
究其原因是mybatis的一个用法问题。
jeesite中使用比较多类似
  1.     <sql id="roleColumns">
  2.             a.id,
  3.             a.office_id AS "office.id",
  4.             a.name,
  5.             a.enname,
  6.             a.role_type AS roleType,
  7.                 a.data_scope AS dataScope,
  8.                 a.remarks,
  9.                 a.create_by AS "createBy.id",
  10.                 a.create_date,
  11.                 a.update_by AS "updateBy.id",
  12.                 a.update_date,
  13.                 a.del_flag,
  14.             o.name AS "office.name",
  15.             o.code,
  16.             a.useable AS useable,
  17.             a.is_sys AS sysData
  18.     </sql>
复制代码

的代码用 office.id 来反向生成office对象
但是由于 在resultMap 使用了 collection 导致该功能失效。
解决办法就是全部使用 mybatis的 联合查询的标签,代码如果,替换 roleDao.xml中resultMap 即可。
  1. <resultMap id="roleResult" type="Role">
  2.                 <id property="id" column="id" />
  3.                 <result property="name" column="name" />
  4.                 <result property="enname" column="enname" />
  5.                 <result property="roleType" column="roleType" />
  6.                 <result property="dataScope" column="dataScope" />
  7.                 <result property="remarks" column="remarks" />
  8.                 <result property="useable" column="useable" />
  9.                 <result property="sysData" column="sysData" />
  10.             <association property="office" column="office.id" javaType="Office" select="com.thinkgem.jeesite.modules.sys.dao.OfficeDao.get">  
  11.                 <id property="id" column="id" />  
  12.             </association>
  13.                  <collection property="menuList" ofType="Menu">
  14.                         <id property="id" column="menuList.id" />
  15.                 </collection>
  16.                 <collection property="officeList" ofType="Office">
  17.                         <id property="id" column="officeList.id" />
  18.                 </collection>
  19.                
  20.         </resultMap>
复制代码

细心的朋友会发现在断点查看时候,create 跟update 两个用户也是空的。也可以使用
  1.            <association property="createBy" column="createBy.id" javaType="User" select="com.thinkgem.jeesite.modules.sys.dao.UserDao.get">  
  2.                 <id property="id" column="id" />  
  3.             </association>
  4.             <association property="updateBy" column="updateBy.id" javaType="User" select="com.thinkgem.jeesite.modules.sys.dao.UserDao.get">  
  5.                 <id property="id" column="id" />  
  6.             </association>
复制代码

解决。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册新会员

本版积分规则

QQ|手机版|小黑屋|Archiver|jeesite 官方论坛. ( 吉ICP备12004769号  

GMT+8, 2018-11-16 11:38 , Processed in 0.163086 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表