(四十一)使用FreeMarker页面引擎、前端 twbs-pagination 分页插件、后端 PageHelper 分页插件概括

裘丰
2023-12-01

FreeMarker页面引擎


什么是Freemarker?

FreeMarker 是一款免费的模板引擎:即一种基于模板和数据,用来生成输出文本(HTML 网页,电子邮件,配置文件,源代码等)的通用工具.FreeMarker比JSP渲染性能更好,不跟web环境耦合,模板文件写不了java代码,责任更分离。FreeMarker解析优先于JS


FreeMarker原理

模板+数据=输出。模板只负责数据在页面中的表现,不涉及逻辑代码。逻辑由数据模型处理


使用Freemarker添加依赖

<!-- FreeMarker -->
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.30</version>
</dependency>

Freemarker是一个模板引擎,能够用来生成各种文件


空值处理

FreeMarker 中的变量必须要赋值,如果不赋值,那么就会抛出异常.可以使用 **!**来指定默认值,例如:

${name!"这是默认值"}
${} 不能直接获取集合/数组/date类型的数据


Freemarker常用指令

一般以#开头

  • include指令
当前模板引入另一个模板文件 
<#include "/common/link.ftl" >
  • assign 指令
创建变量赋值
    <#assign name="小罗"/>
使用${} 获取该变量值   
     ${name}
  • list指令
用于循环遍历
  <#list pageInfo.list as department>
      <tr>
           <td>${department.id}</td>
           <td>${department.name}</td>
           <td>${department.sn}</td>
           <td>${department_index}</td> //索引
           <td>
      </tr>
   <#/list>   
  • if指令
条件判断 condition:将被计算成布尔值的表达式
<#if condition>
   <#elseif condition2> //可选
    <#else>
</#if> //一定要if结尾


前端 twbs-pagination 分页插件

twbs-pagination 是一个简单的自适应 Bootstarp 样式的分页插件,用于前端绘制分页相关的样式效果。网址:https://esimakin.github.io/twbs-pagination/

例子:

<script>
    //分页
    $(function(){
        $("#pagination").twbsPagination({
                totalPages: ${pageInfo.pages} || 1,
                startPage: ${pageInfo.pageNum} || 1,
                visiblePages:5,
                first:"首页",
                prev:"上页",
                next:"下页",
                last:"尾页",
                initiateStartPageClick:false,
                onPageClick:function(event,page){
					$("#currentPage").val(page);
					$("#searchForm").submit();
				}
		});
    })
</script>


后端 PageHelper 分页插件

Pagehelper属于MyBatis的一个分页插件,需要添加依赖

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.2</version>
</dependency>

Pagehelper属于后端的分页插件,能够帮我们节省代码去计算,还有改sql,它自己就会帮我们去计算,执行

  • 需要修改配置文件applicationContext.xml,在sqlSessionFactory下,添加属性
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!-- 注意其他配置 -->
    <property name="plugins">
        <array>
            <bean class="com.github.pagehelper.PageInterceptor">
                <property name="properties">
                    <!--使用下面的方式配置参数,一行配置一个,下面配的是合理化分页 -->
                    <value>
                        pageSizeZero=true
                        reasonable=true
                    </value>
                </property>
            </bean>
        </array>
    </property>
</bean>
  • 使用Pagehelper中提供的 PageInfo 类进行封装,还是要传入当前页和每页条数,以部门为例

    • 类QueryObject
    //封装分页查询需要的参数
    @Setter
    @Getter
    public class QueryObject {
        private int currentPage=1; //当前页
        private int PageSize=5; //每页条数}
    
    • 部门接口IDepartmentService
    PageInfo<Department> query(QueryObject qo);
    
    • 实现类DepartmentServiceImpl
    @Override
        public PageInfo<Department> query(QueryObject qo) {
            //告诉插件我们查询第几页,每页多少条
            PageHelper.startPage(qo.getCurrentPage(),qo.getPageSize());
            //查询当前页数据
            List<Department> departments = departmentMapper.selectForList(qo);
            return new PageInfo<>(departments);
        }
    
    • 部门控制器
    //处理分页查询页面请求
        @RequestMapping("/list")
        public String list(QueryObject qo, Model model){
            PageInfo<Department> pageInfo = departmentService.query(qo);
            model.addAttribute("pageInfo",pageInfo);
            return "department/list";
        }
    
    • 对应前端页面参数,进行传入
 类似资料: