栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2.7SpringBoot之插值与表达式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2.7SpringBoot之插值与表达式

1. 直接输出值

字符串

可以直接输出一个字符串:

${"hello666666"}
${"C:\"}
${r"C:"}

需要进行转义。

如果感觉转义太麻烦,可以在目标字符串的引号前增加 r 标记,在 r 标记后的文本内容将会直接输出

数字

在 FreeMarker 中使用数值需要注意以下几点:

  1. 数值不能省略小数点前面的0,所以".5"是错误的写法。

  2. 数值 8 , +8 , 8.00 都是相同的。

数字还有一些其他的玩法:

<#assign price=99>
${price?string.currency}
${price?string.percent}

布尔

布尔类型可以直接定义,不需要引号,像下面这样:

<#assign flage=true>
${flage?string("yes","no")}

首先使用 <#assign flage=true> 定义了一个 Boolean 类型的变量,然后在 div 中展示,如果 flag e为 true,则输出 yes,否则输出 no。

集合

集合也可以现场定义现场输出,例如如下方式定义一个 List 集合并显示出来:

<#list users as user>
    ${user}


<#list ["1","2","3","4"] as x>
    ${x}

集合中的元素也可以是一个表达式:

<#list [2+2,"javaboy"] as x>
    ${x} 

集合中的第一个元素就是 2+2 的结果,即 4。

也可以用 1..5 表示 1 到 5,5..1 表示 5 到 1,例如:

<#list 5..1 as x>
    ${x} 
<#list 1..5 as x>     ${x} 

也可以定义 Map 集合,Map 集合用一个 {} 来描述:

<#list {"name":"hello","address":"666"}?keys as x>
    ${x}

<#list {"name":"hello","address":"666"}?values as x>
    ${x}

上面两个循环分别表示遍历 Map 中的 key 和 values。

3.1.2 输出变量

创建一个 HelloController,然后添加如下方法:

@Controller
public class UserController {
    @RequestMapping("/hello")
    public String hello(Model model){
        List users=new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            user user=new user();
            user.setId(i);
            user.setUsername("name"+i);
            user.setPassword("password"+i);
            users.add(user);
        }
        model.addAttribute("users",users);
        List user=new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            user user1=new user();
            user1.setId(i);
            user1.setUsername("name"+i);
            user1.setPassword("address"+i);
            user.add(user1);
        }
        model.addAttribute("user",user);
        Map map=new HashMap<>();
        map.put("name","xiaoxiao");
        map.put("age",18);
        model.addAttribute("map",map);
        model.addAttribute("name","xiao6666");
        model.addAttribute("birthday",new Date());

        return "hello";
    }
}

接下来我们在模版文件中对这里的普通变量、List 集合以及 Map 分别进行展示。

普通变量

普通变量的展示很容易,如下:

${name}

集合

集合的展示就有很多不同的玩法了。

直接遍历:

    
        <#list users as u>
            
                ${u.username}
                ${u.address}
            
        
    

输出集合中第四个元素:

    ${users[3].username}

输出集合中第 4-6 个元素,即子集合:

    
        <#list users[3..5] as u>
            
                ${u.username}
                ${u.address}
            
        
    

遍历时,可以通过 变量_index 获取遍历的下标:

    
        <#list users[3..5] as u>
            
                ${u.username}
                ${u.address}
                ${u_index}
                ${u_has_next?string("yse","no")}
            
        
    

Map

直接获取 Map 中的值有不同的写法,如下:

${map.name}
${map.age}

获取 Map 中的所有 key,并根据 key 获取 value:

    <#list map?keys as key>
        ${key}--${map[key]}
    

获取 Map 中的所有 key/value:

<#list map?keys as key>
    ${key}
<#list map?values as value> ${value}

字符串操作

字符串的拼接有两种方式:

${"hello ${name}"}
${"hello "+ name}

 

也可以从字符串中截取子串:

${name[0]}${name[1]}
${name[0..2]}

最终显示效果如下:

3.1.4 集合操作

集合或者 Map 都可以相加。

集合相加:

    <#list ["星期一","星期二","星期三"] + ["星期四","星期五","星期六","星期天"] as x>
        ${x}
    

 

Map 相加:

    <#list (map+{"gitee":"https://gitee.com"})?keys as key>
        ${key}
    

    <#list users + user as x>
        ${x}
    

 

3.1.5 算术运算符

+、—、*、/、% 运算都是支持的。

    <#assign age=99>
    ${age*99/99+99-1}

3.1.6 比较运算

比较运算和 Thymeleaf 比较类似:

  1. = 或者 == 判断两个值是否相等。

  2. != 判断两个值是否不等。

  3. > 或者 gt 判断左边值是否大于右边值。

  4. >= 或者 gte 判断左边值是否大于等于右边值。

  5. < 或者 lt 判断左边值是否小于右边值。

  6. <= 或者 lte 判断左边值是否小于等于右边值。

可以看到,带 < 或者 > 的符号,也都有别名,建议使用别名。

    <#assign age=99>
<#if age=99>age=99
<#if age gt 98>age > 98
<#if age gte 99>age >= 99
<#if age lt 100>age < 100
<#if age lte 99>age <= 99
<#if age!=96>age!=96
<#if age==99>age==99

 逻辑运算

逻辑运算符有三个:

  • 逻辑与 &&

  • 逻辑或 ||

  • 逻辑非 !

逻辑运算符只能作用于布尔值,否则将产生错误。

    <#assign age=99>
    <#if age=99 && 1==1>age=99 && 1==1
    <#if age=99 || 1==0>age=99 || 1==0
    <#if !(age gt 99)>!(age gt 99)

3.1.8 空值处理

为了处理缺失变量,Freemarker 提供了两个运算符:

  1. !:指定缺失变量的默认值

  2. ??:判断某个变量是否存在

如果某个变量不存在,则设置其为 javaboy,如下:

${aaa!"javaboy"}

如果某个变量不存在,则设置其为空字符串,如下:

${aaa!}

即,! 后面的东西如果省略了,默认就是空字符串。

判断某个变量是否存在:

<#if aaa??>aaa

指输出了666

3.2 内建函数

内建函数涉及到的东西比较多,可以参考官方文档:

http://freemarker.foofun.cn/ref_builtins.html

这里仅说一些比较常用的内建函数。

cap_first

使字符串第一个字母大写:

${"hello"?cap_first}

lower_case

将字符串转换成小写:

${"HELLO"?lower_case}

upper_case

将字符串转换成大写:

${"hello"?upper_case}

trim

去掉字符串前后的空白字符:

${" hello"?trim}

size

获取序列中元素的个数:

${users?size}

int

取得数字的整数部分,结果带符号:

${3.14?int}

日期格式化

${birthday?string("yyyy-MM-dd")}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/852159.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号