报错时回显注册的用户名
<div class="form-group has-success has-feedback">
<input type="text" class="form-control" id="loginacct" name="loginacct" placeholder="请输入登录账号"
//param.loginacct是获取客户端请求中的loginacct元素
value="${param.loginacct}" autofocus>
<span class="glyphicon glyphicon-user form-control-feedback"></span>
</div>
//还要再补充一下前后台的绝对路径
注销操作
@RequestMapping("/logout")
public String logout(HttpSession session) {
log.debug("注销用户...");
//先判断session域中是否放了数据
//可能session已经失效了
if(session!=null) {
//先删除后销毁
session.removeAttribute(Const.LOGIN_ADMIN);
session.invalidate();
}
//这里不能用转发,因为刷新页面时转发会重复提交请求
return "redirect:/index";
}
加密功能
if(!admin.getUserpswd().equals(MD5Util.digest(userpassword))) {
throw new LoginException(Const.LOGIN_USERPSWD_ERROR);
}
//记得加MD5Util在util里
抽取相同页面
<%@ include file="/WEB-INF/jsp/common/css.jsp" %>
<jsp:include page="/WEB-INF/jsp/common/css.jsp"></jsp:include>
看主页面是否经常发生变化,是则选用动态包含
页面的css和javascript用静态
管理员的菜单栏就要用动态引进了
菜单树
1、没用插件存手打
controller层,响应请求
查询表单数据并放入session域中
@RequestMapping("/main")
public String main(HttpSession session) {
log.debug("跳转到后台系统的登入页面...");
查询表单数据并放入session域中
List<TMenu> menuList= menuService.listMenuAll();
session.setAttribute("menuList", menuList);
return "main";
}
==service层 ==
查询所有的父菜单,并且把子菜单存到父菜单的childen里
@Service
public class TMenuServiceImpl implements TMenuService {
Logger log= LoggerFactory.getLogger(TMenuServiceImpl.class);
@Autowired
TMenuMapper menuMapper;
@Override
public List<TMenu> listMenuAll() {
//获取数据库中的菜单
List<TMenu> allList=menuMapper.selectByExample(null);
List<TMenu> menuList=new ArrayList<>();
Map<Integer,TMenu> cache=new HashMap<Integer, TMenu>();
//循环选出父菜单
//为了方便把子添加到父的child<list>中则把父再在map中存一遍
for (TMenu tMenu : allList) {
if(tMenu.getPid()==0) {
menuList.add(tMenu);
cache.put(tMenu.getId(), tMenu);
}
}
//循环选出子菜单
for (TMenu tMenu : allList) {
if(tMenu.getPid()!=0) {
Integer pId=tMenu.getPid();
TMenu parent=cache.get(pId);
parent.getChilden().add(tMenu);
}
}
//返回父菜单
return menuList;
}
}
前端
解析menuList菜单
<!--
手写循环树菜单
背景:menuList里存的是一级父菜单,每个父菜单里有哥child<List>子菜单里面存着二级菜单(如果没有二级菜单着为null)
从session中获取menuList
循环遍历所有菜单
if 有没有子菜单
else 有子菜单
循环遍历子菜单
-->
<c:forEach items="${menuList}" var="parent">
<div class="tree">
<ul style="padding-left:0px;" class="list-group">
<c:if test="${empty parent.childen }">
<li class="list-group-item tree-closed" >
<a href="${PATH}/${parent.url}"><i class="${parent.icon}"></i> ${parent.name}</a>
</li>
</c:if>
<c:if test="${not empty parent.childen }">
<li class="list-group-item tree-closed">
<span><i class="${parent.icon}"></i> ${parent.name}管理 <span class="badge" style="float:right">${parent.childen.size()}</span></span>
<ul style="margin-top:10px;display:none;">
<c:forEach items="${menuList.childen}" var="childen">
<li style="height:30px;">
<a href="${PATH}/${childen.url}"><i class="${childen.icon}"></i> ${childen.name}</a>
</li>
</c:forEach>
</ul>
</li>
</c:if>
<li class="list-group-item tree-closed" >
<a href="param.html"><i class="glyphicon glyphicon-list-alt"></i> 参数管理</a>
</li>
</ul>
</div>
</c:forEach>