会议管理系统SSM记录(二)

news2024/11/25 7:10:06

目录:

(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进行访问就可以了:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML+CSS大作业:基于HMTL校园学校网页设计题材【我的学校网站】

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

专精特新企业三个层级

专精特新企业也是分层级的。工信部2022年6月印发《优质中小企业梯度培育管理暂行办法》里面明确提出中小企业培育的3个梯度&#xff0c;分别是创新型中小企业、专精特新中小企业和专精特新小巨人企业&#xff0c;刚好构成中小企业发展层级金字塔。这就意味着企业想要发展崛起&a…

19 04-读取DTC快照信息

诊断协议那些事儿 诊断协议那些事儿专栏系列文章&#xff0c;19服务作为UDS中子功能最多的服务&#xff0c;一共有28种子功能&#xff0c;本文将介绍常用的19 04服务&#xff1a;读取快照信息。 关联文章&#xff1a; 19服务List 19 01-通过状态掩码读取DTC数目 $19服务:DTC…

1.2 C++编译器对指针的解释方式(深度理解c++指针)

1.2 指针 1.2.1 指针解释方式 从内存的角度&#xff0c;一个指向类对象的指针与一个指向整数类型的指针或一个指向数组的指针&#xff0c;三者之间是没有任何区别的&#xff0c;它们内部都只存储了一个机器地址值(word)。不同类型指针的区别仅在于其寻址出来的object类型的不…

div+css布局实现个人网页设计(HTML期末作业)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

Spring源码深度解析:七、bean的加载① - doGetBean概述

我们先通过getBean()流程图&#xff0c;来了解Spring的getBean()方法的工作流程&#xff0c;接着根据这个工作流程一步一步的阅读源码 一、前言 文章目录&#xff1a;Spring源码分析&#xff1a;文章目录 getBean()方法是spring ioc的核心&#xff0c;阅读getBean()方法的源…

【Spring Boot+Vue.js+JPA+Mysql】实现前后端分离的名片系统(附源码 超详细必看 可作为大作业使用)

需要项目源码请点赞关注收藏后评论区留言并且私信~~~ 一、项目简介 前后端分离的核心思想时前端页面通过掉用后端的RESTfulApI进行数据交互。本次项目使用Spring BootSpring Data JPA实现后端系统&#xff0c;使用Vue.js实现前端系统&#xff0c;数据库采用mysql&#xff0c;集…

磨金石教育摄影技能干货分享||如何将平凡的窗户拍出美感

窗户有着天然的构图优势&#xff0c;一直是摄影爱好者们喜欢拍的场景。都说眼睛是心灵的窗户&#xff0c;窗户其实就是房间窥探世界的眼睛。 特别是在中国文化中&#xff0c;对窗户的艺术雕刻&#xff0c;总是那么侧重。一间房子好不好看&#xff0c;窗户的设计往往是较为重要…

Java里的异常机制

一、什么是异常 软件程序在运行过程中&#xff0c;遇到用户输入不符合要求、文件路径不存在、文件格式错误、非法参数等的异常问题&#xff0c;叫做异常&#xff08;Exception&#xff09;。 二、简单分类 1.检查性异常 最具代表的检查性异常就是用户错误或问题引起的异常&…

计算机网络:网络层

网络层 网络层主要是解决寻址连接问题&#xff0c;例如两个主机在网络上通过IP进行连接通信 1.网络层概述 网络层的主要任务是实现网络互联&#xff0c;进而实现数据包在各网络之间的传输 需要解决的主要问题&#xff1a; 因特网 使用TCP/IP协议栈通过学习TCP/IP协议栈的网…

Nginx:handler 模块的实现

文章目录1、模块的分类2、模块的基本结构2.1、模块配置结构2.2、模块配置命令2.3、模块上下文结构2.4、模块的定义3、http 请求处理3.1、请求处理阶段3.2、获取用户请求3.3、发送响应4、例&#xff1a;流量限制模块4.1、操作共享内存4.1.1、红黑树4.1.2、双向链表4.2、编写模块…

APS排程软件在压铸行业的应用

压铸是一种金属铸造工艺&#xff0c;其特点是利用模具内腔对融化的金属施加高压。模具通常是用强度更高的合金加工而成的&#xff0c;这个过程有些类似注塑成型。大多数压铸铸件都是不含铁的&#xff0c;例如锌、铜、铝、镁、铅、锡以及铅锡合金以及它们的合金。根据压铸类型的…

js:判断文本溢出隐藏生效text-overflow: ellipsis

效果展示 参数汇总 看上图&#xff0c;不难发现&#xff0c;文字有超出的条件是 target.scrollWidth > target.offsetWidth可以通过js判断是否生效&#xff0c;参考element-ui的代码实现 https://github.com/ElemeFE/element/blob/dev/packages/table/src/table-body.js#…

RocketMQ的主要组件及其功能

一、RocketMQ部署的组件 RocketMQ是啥就不多说了&#xff0c;一个基于主题的订阅发布机制的消息中间。下面就是我们部署时的架构&#xff0c;NameServer和Broker需要部署在服务器上&#xff0c;对于消费者和生产者则是我们在自己的程序里启动&#xff0c;去push/pull消息。 消…

rust变量与常量

变量绑定 在rust里有个核心原则&#xff0c;那就是所有权。在其它语言中&#xff0c;我们可以把一个值赋值给变量。但是在rust里&#xff0c;是把值绑定到变量上。任何内存对象都是有主人的&#xff0c;而且一般情况下完全属于它的主人&#xff0c;绑定就是把这块内存绑定给一…

路由器的工作原理,详细介绍

1、路由器的作用 路由器&#xff1a; router 作用&#xff1a;实现跨网段通信&#xff0c;不同的网络之间通信 交换机&#xff1a; switch 作用&#xff1a;组建局域网&#xff0c;就是将电脑通过网络连起来 交换机的原理参考文档&#xff1a;计算机网络之交换机的工作原理…

前端React项目的Next.js项目通过CSS引入自定义字体文件

最近在Web3的项目&#xff0c;需要引入自定义字体&#xff0c;做下记录&#xff1a; 1、 如果是下载的字体文件&#xff0c;直接能使用的就不需要转换&#xff0c;如果是TTF格式则需要转换成eot、svg、woff、woff2&#xff0c;这里提供一个网站Font Squirrel | Create Your Ow…

ROS之话题通信

文章目录理论模型分析流程1. 发布方2. 订阅方3.配置 CMakeLists.txt4.执行5.注意参考理论模型 话题通信实现模型是比较复杂的&#xff0c;该模型如下图所示,该模型中涉及到三个角色: ROS Master (管理者)Talker (发布者)Listener (订阅者) ROS Master 负责保管 Talker 和 Li…

简化javabean开发-->Lombok

目录 一.Lombok 1.Lombok 介绍 1.1Lombok 作用 1.2SpringBoot 和 IDEA 官方支持 2.Lombok 常用注解 3.Lombok 应用实例 3.1在 pom.xml 引入 lombok 3.2. 修改 Furn.java 3.3在 idea 安装 lombok 插件 一.Lombok 1.Lombok 介绍 1.1Lombok 作用 1. 简化 JavaBean 开…

Camtasia2023喀秋莎录屏软件下载操作教程

Camtasia软件2023最新版是一款电脑屏幕录制与视频剪辑的软件&#xff0c;功能强大且操作简单。可以使用该软件对视频进行添加滚动字幕的效果&#xff0c;并且还可以选择注释标注的样式、主题以及形状等。在内置的视频编辑器中对视频进行剪辑时还可以拖放文本、添加效果、添加过…