spring学习笔记——引用bean的属性值,动态管理网站参数与菜单项

我所在公司的开发框架很陈旧,功能上也有很多bug,唯一让我觉得NB的是这框架可以动态调整自己的界面菜单、子菜单,动态配置权限和各种参数。一直想知道这种功能的实现方式,今天看书,发现spring中对bean属性的引用功能可以很容易的把分散在各处的系统参数维护在数据库中。又拿出第一篇写的demo,修改一番,实现了在数据库中管理菜单项的功能。

首先在数据库中建立相应的表,菜单的字段有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>



猜你喜欢

转载自blog.csdn.net/gklifg/article/details/15504311
今日推荐