菜单模块结构图:
domain层
其中, leaf 用来标识主子菜单(同时也是为了配合前端extjs treePanel控件所需的标识),这里true表示为子菜单,false表示为主菜单; children 用来存放主菜单下的所有子菜单。
service层
简单说下两级菜单的加载原理:我这里只假设了只有主菜单和子菜单两级菜单(多级菜单的实现思想类似)。首先,根据用户的菜单权限,加载所有的主菜单,然后根据每个主菜单的菜单id去逐个获取该主菜单下的所有子菜单,所有的子菜单加载完后那么也就完成了两级菜单的加载了。
controller层
spring3mvc封装了json的自动转换,使用@ResponseBody标记下该方法,这样return对象的时候,将自动帮你把普通的pojo对象转成json格式的对象.
菜单效果图:
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层
- @Service
- public class MenuService {
- @Autowired
- private MenuMapper menuMapper;
- @Transactional
- public 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 {
- @Autowired
- private UserService userService;
- @Autowired
- private 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格式的对象.
菜单效果图: