读书人

Spring3MVC+MyBatis+ExtJs3调整开发系

发布时间: 2012-09-03 09:48:39 作者: rapoo

Spring3MVC+MyBatis+ExtJs3整合开发系列之二:菜单模块演示
我又回来了,带来了Spring3MVC+MyBatis+ExtJs3整合开发系列之第二篇:菜单模块演示。

承接上篇Spring3MVC+MyBatis+ExtJs3整合开发系列之一:登录模块演示,本篇增加了菜单加载的功能到本项目中。

菜单模块结构图:



domain层

public class Menu implements Serializable {private static final long serialVersionUID = -2726709540069876682L;private Long id;private Long parent_id;private String name;private String image;private String url;private String qtip;private Integer sortNum;private String description;/** * true:默认为叶子结点,即子菜单 */private boolean leaf = true;private List<Menu> children;

其中,leaf用来标识主子菜单(同时也是为了配合前端extjs treePanel控件所需的标识),这里true表示为子菜单,false表示为主菜单;children用来存放主菜单下的所有子菜单。

service层
@Servicepublic class MenuService {@Autowiredprivate MenuMapper menuMapper;@Transactionalpublic List<Menu> getMenuListByUserId(Long userId) {Map<String,Object> param = new HashMap<String,Object>();List<Menu> mainMenuList = menuMapper.getMainMenuList(userId);Iterator<Menu> it = mainMenuList.iterator();//装载主菜单下所有的子菜单while(it.hasNext()) {Menu menu = it.next();//false:表示为主菜单menu.setLeaf(false);Long parentId = menu.getId();param.put("userId", userId);param.put("parentId", parentId);List<Menu> subMenuList = menuMapper.getSubMenuList(param);menu.setChildren(subMenuList);}return mainMenuList;}}

简单说下两级菜单的加载原理:我这里只假设了只有主菜单和子菜单两级菜单(多级菜单的实现思想类似)。首先,根据用户的菜单权限,加载所有的主菜单,然后根据每个主菜单的菜单id去逐个获取该主菜单下的所有子菜单,所有的子菜单加载完后那么也就完成了两级菜单的加载了。

controller层
@Controller@RequestMapping("/user")public class UserController {@Autowiredprivate UserService userService;@Autowiredprivate MenuService menuService;


/** * 获取所有菜单 * @param request * @param response * @return */@RequestMapping(value="/Menus",method=RequestMethod.POST)public @ResponseBody Map<String,Object> getTopMenus(HttpServletRequest request,               HttpServletResponse response){Map<String,Object> result = new HashMap<String,Object>();User user = (User)request.getSession().getAttribute("user");List<Menu> list = menuService.getMenuListByUserId(user.getId());result.put("success", "true");result.put("data", list);return result;}

spring3mvc封装了json的自动转换,使用@ResponseBody标记下该方法,这样return对象的时候,将自动帮你把普通的pojo对象转成json格式的对象.

菜单效果图:


源码地址:http://code.google.com/p/kika/ connectionTimeout="20000"
redirectPort="8443" URIEncoding='UTF-8'/>

数据库的话,可以参考我的一篇文章。

如果还不行,就检查下页面编码啥的,中文乱码问题确实比较头疼,呵呵。

读书人网 >JavaScript

热点推荐