spring学习笔记——引用bean的属性值,动态管理网站参数与菜单项
2013-11-12 22:52
411 查看
我所在公司的开发框架很陈旧,功能上也有很多bug,唯一让我觉得NB的是这框架可以动态调整自己的界面菜单、子菜单,动态配置权限和各种参数。一直想知道这种功能的实现方式,今天看书,发现spring中对bean属性的引用功能可以很容易的把分散在各处的系统参数维护在数据库中。又拿出第一篇写的demo,修改一番,实现了在数据库中管理菜单项的功能。
首先在数据库中建立相应的表,菜单的字段有id、menuName、url:
菜单项是各项系统参数中的一项,故要放进一个数据参数集合实体,目前这个集合实体中只有这一个参数项
定义好了系统参数的bean,就可以在别的类中引用了,为了试验对bean属性的引用,在下面的代码中这里不引用SystemParam对象,而是使用#{systemParam.menuList}引用其属性menuList。
在登陆成功的jsp上输出菜单项:
首先在数据库中建立相应的表,菜单的字段有id、menuName、url:
public class Menu { private int id; private String menuName; private String url; }
菜单项是各项系统参数中的一项,故要放进一个数据参数集合实体,目前这个集合实体中只有这一个参数项
package po; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; @Component("systemParam") public class SystemParam { @Autowired private JdbcTemplate jdbcTemplate; private List<Menu> menuList; public SystemParam() { } @PostConstruct//在装配bean的时候对menuList进行赋值 public void initParam(){ this.menuList = queryMenuList(); } // 从数据库中查询出菜单列表 public List<Menu> queryMenuList(){ String sql = "select * from menu"; List<Menu> resList = new ArrayList<Menu>(); List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); for(Map<String,Object> m:list){ Menu menu = new Menu(); menu.setId(((Long) m.get("id")).intValue()); menu.setMenuName((String) m.get("menuName")); menu.setUrl((String) m.get("url")); resList.add(menu); } return resList; } public List<Menu> getMenuList() { return menuList; } public void setMenuList(List<Menu> menuList) { this.menuList = menuList; } }
定义好了系统参数的bean,就可以在别的类中引用了,为了试验对bean属性的引用,在下面的代码中这里不引用SystemParam对象,而是使用#{systemParam.menuList}引用其属性menuList。
package action; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import po.LoginCommand; import po.Menu; import po.User; import service.UserService; @Controller//MVC嘛,这是控制层 public class LoginController { @Autowired private UserService userService; @Value("#{systemParam.menuList}") private List<Menu> menuList; @RequestMapping(value="/index.html") public String loginPage(){ return "login"; } @RequestMapping(value="/login.html") public ModelAndView loginCheck(HttpServletRequest request,LoginCommand loginCommand){ request.setAttribute("menuList",menuList); User user = userService.login(loginCommand.getUserName(),loginCommand.getPassword()); if(user!=null){ userService.doLog(user); request.getSession().setAttribute("user", user); return new ModelAndView("main"); } return new ModelAndView("login","error","用户名或密码错误"); } }
在登陆成功的jsp上输出菜单项:
<body> <div> <c:forEach items="${menuList}" var="m"> <span><a href="${m.url}" >${m.menuName}</a></span> </c:forEach> </div> <div> 欢迎您!${user.name} </div> </body>
相关文章推荐
- Spring 学习笔记(4)—— Bean 的基本配置、依赖注入(DI)、注入参数引用其他Bean
- 引用 Spring学习笔记(让Spring自动扫描和管理Bean)
- spring学习笔记4--让sping自动扫描和管理Bean
- Spring学习笔记——Sprin管理Bean的原理
- ITCAST视频-Spring学习笔记(编码剖析Spring管理Bean的原理)
- ITCAST视频-Spring学习笔记(让Spring自动扫描和管理Bean)
- spring2.5.6学习笔记四:编码剖析Spring管理Bean的原理
- [原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间
- ITCAST视频-Spring学习笔记(配置Spring管理的bean的作用域)
- Spring学习笔记(3)----编码剖析Spring管理Bean的原理
- spring2.5.6学习笔记六:配置Spring管理的bean的作用域
- Spring学习历程---引用Bean的属性值
- spring学习笔记整理--04(配置Spring管理的bean的作用域、生命周期)
- ITCAST视频-Spring学习笔记(Spring管理的Bean的生命周期)
- Spring学习笔记(3)----编码剖析Spring管理Bean的原理
- Spring学习笔记(1):Bean的生命周期管理
- Spring学习笔记之管理Bean的生命周期
- spring2.5.6学习笔记七:Spring管理的Bean的生命周期
- Java框架spring 学习笔记(十):bean管理(注解和配置文件混合使用)
- Spring学习笔记之Bean基本管理(BeanFactory,ApplicationCo 4000 ntext)