Spring Boot 2精髓 - (4) 视图技术

spring boot

Beetl 模板引擎

特点:

  • 功能完备

  • 语法和使用习俗简单, 类似 JavaScript 语法和习俗

  • 超高的性能

  • 易于整合

  • 支持模板单独开发和测试

  • 扩展和个性化。 Beet!支持自定义方法、格式化函数、虚拟属性、标签和 HTML 标签。同时 也支持自定义占位符和控制语句起始符号。

依赖

beetl-framework-starter

定界符号和占位符

Beetl 支持自定义定界符号和占位符号 , 默认使用<%%>作为定界符号,使用${}作为占位符号

变量

全局变量

全局变量即通过 Model 或者 ModelAndView传入的变量,可以在模板或者子模板中使用。

默认的全局变量:

  • request 中所有的 attribute 在模板中可以直接通过 name 来引用,比如在 Controller 层 request.setAttribute(”user”,user),则在模板中可以 直接用 ${user.name}。这里也包括 Model 或者 Mode!AndView 中的所有变量,都会成为模板的 全局变量

  • Session 提供了 Session 会话,模板通过 session[”name”]或者 session.name 引用 Session 中的变量。注意, Session 并非 Serviet 中的标准 Session 对象。参考 Serviet 来获取HTTP Session

  • request,标准的 HTTPServletRequest,可以在模板中引用 request 属性 (getter),如 ${request.requestURL}

  • parameter, 读取用户提交的参数,如${parameter.userld}

  • ctxPath, Web 应用中的 ContextPath。 在 Spring Boot 中, 应用默认是“/” 。 通过 application.properties 的属性 server.context-path 可以配置。

  • servlet, WebVariable 的 实例,包含了 HTTPSession、 HTTPServletRequest、 HTTPServlet­ Response 三 个属性,模板中可以通过 request、 response、 session 来引用,如 ${servlet.request.requestURL}

  • 所有 groupTemplate 的共享变量

局部变量

在模板中定义的变量,只能在当前模板中使用,无法在子模板中使用:

1
2
@var salary = user.salary*2;
<span>${user .name}</span>

Beet! 定义变量的方式与 JS 类似

共享变量

类似全局变量,可以在任何模板中使用,需要通过 groupTemplate 的 API 添加

模板变量

变量的内容是模板对应的输出

表达式

计算表达式

类似 JS, 支持+、 、气/、%等表达式,变量的类型与相应的 Java类型一致

逻辑表达式

Beetl 支持类似 JavaScript、 Java 的条件表达式,如〉、〈、二、 !=、〉=、<=、 以及三元表达式等

控制语句

循环语旬

Beetl 支持多种循环方式,最常用的是 for···in 循环语句

for···in循环支持 elsefor 语法,即如果未进入循环体,则执行 elsefor部分

for(exp;exp,exp)

while(exp)

条件语旬

if else

switch case

break

try catch

函数调用

Beet!内直了大量的常用函数以辅助模板渲染、规则引擎等功能, 函数调用方法与 JS一样。 当然也可以注册自定义 的 函数,自定义函数可以通过 Java 来实现 ,或者通过 Beet! 本身来实现。

Beetl 提供的常用函数如下 :

  • print和 println,输出对象,如果对象为空,则不输出。
  • has,判断是否具有这个全局变量,如 if(has(userList)){….},判断 后台是否提供了 userList 变量 。
  • isEmpty,判断变量或者表达式是否为空,如果不存在,为 null,都返回 true:同时如 果字符串空,集合空也返回 true; isNotEmpty 则相反。
  • debug,在控制台打印变量或者表达式。此方法还会附带此调用所在的文件和模板,以及变量的名字等信息,方便追踪 。
  • date,日期函数,获得当前日期。
  • trim,截取一个日期或者数字类型井返回字符串,如trim(126.l8,1)返回字符串 126.18, 位im(date(),’yyyy’)返回年份 2017。
  • parseInt、parseLong、parseDouble,将字符串或者 number转为对应的类型
  • global,返回一个全局变量值,参数是一个字符串,如 varuser= global(“user_”+i)
  • cookie,返回指定的 cookie对象, 如 var userCook = cookie(”user”),allCookies = cookie()
  • strutil.* 系列函数,对字符串的操作,如 strutil.split(“abc,def”,”,”)将返回一个字符串数组,具体参考Beetl使用手册
  • array.*, 集合的相关函数 ,如 array.contain
  • shiro.* Spring是常用的安全框架,并非是Beetl的内置函数(参考官网手册)
  • spring.* Spring框架中可以使用的一系列函数,比如 spel表达式
  • reg.*,正则表达式的相关函数

格式化函数

格式化的格式是${exp,formatName=”可选参数”}

直接调用Java

可以在模板中以 Java方式调用表达式,使用的时候,必须在表达式前使用@符号以表示其 后表达式是 Java 风格的

标签函数

所谓标签函数,即允许处理模板文件中的一块内容,功能等同于 jsp tag

HTML 标签

HTML 是一种特殊的标签函数, Beetl 在形式上与HTML标签类似, Beetl 默认通过#符号 来区分 Beetl的HTML标签

安全输出

Beetl 在变量表达式后面使用符号“!”来提醒 Beetl 此变量可能不存在,表达式将返回“ ! ” 后的表达式值,如果其后没有表达式,则返回 null。

高级功能

配置 Beetl

在 resources 下添加 beetl.properties 文件来个性化 Beetl

自定义函数

自定义方法可以通过 Function接口的 call方法实现

自定义格式化函数

自定义标签函数

自定义 HTML 标签

布局

布局是保持模板重用的最重要的功能之一, Beet) 可以联合 include 和 layout 来实现重用

AJAX局部渲染

脚本引擎

Beetl 是模板引擎,但本质上还是一个脚本语言,它在解析阶段会将模板转化为 Beetl 脚本执行。groupTemplate 提供了执行脚本的功能,并能获取到返回值

JSON 技术

在 Controller 中,方法注解为@ResponseBody,则 自动将方法返回的对象序列化成 JSON。

MVC分离开发

Beetl提供了 WebSimulate来支持这种分离

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2021 朝着牛逼的道路一路狂奔 All Rights Reserved.

访客数 : | 访问量 :