当前位置: 代码迷 >> 综合 >> Spring3MVC+MyBatis+ExtJs3整合开发系列之二:菜单模块演示
  详细解决方案

Spring3MVC+MyBatis+ExtJs3整合开发系列之二:菜单模块演示

热度:50   发布时间:2024-01-10 01:06:41.0
菜单模块结构图: 
  
 

domain层  
Java代码  
  1. public class Menu implements Serializable {  
  2.     private static final long serialVersionUID = -2726709540069876682L;  
  3.       
  4.     private Long id;  
  5.     private Long parent_id;  
  6.     private String name;  
  7.     private String image;  
  8.     private String url;  
  9.     private String qtip;  
  10.     private Integer sortNum;  
  11.     private String description;  
  12.     /** 
  13.      * true:默认为叶子结点,即子菜单 
  14.      */  
  15.     private boolean leaf = true;  
  16.     private List<Menu> children;  

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

service层  
Java代码  
  1. @Service  
  2. public class MenuService {  
  3.     @Autowired  
  4.     private MenuMapper menuMapper;  
  5.       
  6.     @Transactional  
  7.     public List<Menu> getMenuListByUserId(Long userId) {  
  8.         Map<String,Object> param = new HashMap<String,Object>();  
  9.         List<Menu> mainMenuList = menuMapper.getMainMenuList(userId);  
  10.         Iterator<Menu> it = mainMenuList.iterator();  
  11.         //装载主菜单下所有的子菜单  
  12.         while(it.hasNext()) {  
  13.             Menu menu = it.next();  
  14.             //false:表示为主菜单  
  15.             menu.setLeaf(false);  
  16.             Long parentId = menu.getId();  
  17.             param.put("userId", userId);  
  18.             param.put("parentId", parentId);  
  19.             List<Menu> subMenuList = menuMapper.getSubMenuList(param);  
  20.             menu.setChildren(subMenuList);  
  21.         }  
  22.         return mainMenuList;  
  23.     }  
  24. }  

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

controller层  
Java代码  
  1. @Controller  
  2. @RequestMapping("/user")  
  3. public class UserController {  
  4.     @Autowired  
  5.     private UserService userService;  
  6.     @Autowired  
  7.     private MenuService menuService;  


Java代码  
  1. /** 
  2.      * 获取所有菜单 
  3.      * @param request 
  4.      * @param response 
  5.      * @return 
  6.      */  
  7.     @RequestMapping(value="/Menus",method=RequestMethod.POST)  
  8.     public @ResponseBody Map<String,Object> getTopMenus(HttpServletRequest request,     
  9.             HttpServletResponse response){  
  10.         Map<String,Object> result = new HashMap<String,Object>();  
  11.         User user = (User)request.getSession().getAttribute("user");  
  12.         List<Menu> list = menuService.getMenuListByUserId(user.getId());  
  13.         result.put("success""true");  
  14.         result.put("data", list);  
  15.         return result;  
  16.     }  

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

    菜单效果图: 

  相关解决方案