目录:
(1)整合Freemarker
(2)用户登录
(3)提取头部
(4)提取菜单抽取
(1)整合Freemarker
在pom.xml中加入Freemark依赖:
创建freemark-var.properties:
声明变量,在freemark中可能会用到这个变量:
在spring-servlet.xml中配置视图解析器、
创建ftl页面:
修改HelloController:
以上SSM+Freemark架构已经搭建好了
(2)用户登录
首先把静态文件拷贝到目录下:
把静态资源放在webapp下面,那么在mvc:配置文件spring-servlet.xml进行放行
把login.html修改后缀为ftl:
创建LoginController:
就可以访问到登录页面:
创建Employee实体类:
创建EmployeeMapper接口,和 EmployeeMapper.xml:
创建EmployeeService:
在LoginController:书写登录请求:
登录成功时重定向,登录失败服务端跳转,返回的String,既可以服务端跳转既可以重定向
注入EmployeeService:
@Autowired
private EmployeeService employeeService;
//登录请求
@PostMapping("/doLogin")
public String doLogin(String username, String password, Model model, HttpSession httpSession){
Employee employee = employeeService.doLogin(username,password);
if (employee == null){
model.addAttribute("error","用户名或密码错误,请重新登录");
return "forward:/";
}else {
if (employee.getStatus() == 0){
model.addAttribute("error","用户待审核");
return "forward:/";
}else if (employee.getStatus() == 2){
model.addAttribute("error","审核未通过");
return "forward:/";
}else {
httpSession.setAttribute("currentuser",employee);//存入session
return "redirect:/notifications";//跳转到登录成功的页面
}
}
}
Controller调用EmployeeService:书写EmployeeService方法:
注入Mapper:
@Autowired
private EmployeeMapper employeeMapper;
EmployeeService调用EmployeeMapper接口方法
//登录请求
public Employee doLogin(String username, String password) {
Employee employee = employeeMapper.loadEmpByUsername(username);//根据用户姓名查询方法
if (employee == null || !employee.getPassword().equals(password)){
return null;
}
return employee;
}
在EmployeeMapper中创建登录方法:
//根据用户姓名查询方法
Employee loadEmpByUsername(String username);
在EmployeeMapper.xml中书写sql语句:注意di要和接口方法对应
<!--根据用户姓名查询方法-->
<select id="loadEmpByUsername" resultType="com.xzb.meeting.model.Employee">
select *
from employee
where username = #{username}
</select>
在Login.ftl修改:给form加action:写controller方法的请求方式
再加一个失败的提示信息:
注意表单的要有name属性,在controller来接收这个输入的内容的:
输入错误的密码:
输入一个未通过的用户:
输入正确的密码:登录成功跳转到notifications,这里只是还未写这个页面,所以报404
我们把用户信息存入到session里面去
(3)提取头部
创建NoatificationsController:来进行跳转到登录页面
修改后缀为ftl:
修改notifications页面:
所有页面都有这个可以把这些提取出来,提取成一个ftl页面。top.ftl
然后在notifications.ftl中引入这个页面:
所有页面都要更改成top.ftl:
刷新一下:
登录成功之后:
可以先把所有的html页面修改后缀为ftl:
在每个页面上面再更改top.ftl
(4)提取菜单抽取
添加一个权限判断的,角色为管理员2的才显示这个菜单:
没有登录看到的菜单:
在每个页面加入左侧菜单,需要把它提取出来:leftMenu.ftl
leftMenu.ftl:这里是最终的代码,添加了新的菜单栏
<div class="page-sidebar">
<div class="sidebar-menugroup">
<div class="sidebar-grouptitle">个人中心</div>
<ul class="sidebar-menu">
<li class="sidebar-menuitem"><a href="/notifications">最新通知</a></li>
<li class="sidebar-menuitem active"><a href="/mybookings">我的预定</a></li>
<li class="sidebar-menuitem"><a href="/mymeetings">我的会议</a></li>
<li class="sidebar-menuitem"><a href="/changepassword">修改密码</a></li>
</ul>
</div>
<div class="sidebar-menugroup">
<div class="sidebar-grouptitle">人员管理</div>
<ul class="sidebar-menu">
<li class="sidebar-menuitem"><a href="/register">员工注册</a></li>
<#if currentuser?? && (currentuser.role==2)>
<li class="sidebar-menuitem"><a href="/admin/approveaccount">注册审批</a></li>
<li class="sidebar-menuitem"><a href="/admin/searchemployees?status=1">搜索员工</a></li>
</#if>
</ul>
</div>
<div class="sidebar-menugroup">
<div class="sidebar-grouptitle">部门管理</div>
<ul class="sidebar-menu">
<#if currentuser?? && (currentuser.role==2)>
<li class="sidebar-menuitem"><a href="/admin/departments">部门管理</a></li>
</#if>
</ul>
</div>
<div class="sidebar-menugroup">
<div class="sidebar-grouptitle">会议室管理</div>
<ul class="sidebar-menu">
<#if currentuser?? && (currentuser.role==2)>
<li class="sidebar-menuitem"><a href="/admin/addmeetingroom">添加会议室</a></li>
<li class="sidebar-menuitem"><a href="/meetingrooms">查看会议室</a></li>
</#if>
</ul>
</div>
<div class="sidebar-menugroup">
<div class="sidebar-grouptitle">会议预定</div>
<ul class="sidebar-menu">
<li class="sidebar-menuitem"><a href="/bookmeeting">线上预定会议</a></li>
<li class="sidebar-menuitem"><a href="/bookmeeting2">线下预定会议</a></li>
<li class="sidebar-menuitem"><a href="/searchmeetings">搜索会议</a></li>
</ul>
</div>
</div>
然后再在每个页面进行引入菜单栏:
管理员登录看到就多了:
左侧菜单:a标签添href以后添加对应的controller进行访问就可以了: