freemarker类型转换与if判断,字符串转数字,数字转字符串,布尔值转换为字符串,字符串和日期转换

一、前言

freemarker中也是根据类型进行判断的,先看下如下的判断:

 

<#if classify?? && classify.id == 1>
·相等
</#if>

classify是一个对象,其中的id是Long类型,在页面上被转成了string,运行会报如下的错误:

 

[11:02:48,694][ERROR] freemarker.runtime:60 - Error executing FreeMarker template
FreeMarker template error:
Can't compare values of these types. Allowed comparisons are between two numbers, two strings, two dates, or two booleans.
Left hand operand is a string (wrapper: f.t.SimpleScalar).
Right hand operand is a number (wrapper: f.t.SimpleNumber).
The blamed expression:
==> classify.id == 1  [in template "modules/front/classify/classify.html" at line 87, column 74]

错误信息提示if左侧是一个字符串,右侧是一个数值型的,所以不通过,这个时候就需要类型转换,如下方式即可通过:

<#if classify?? && classify.id?number == 1>
·相等
</#if>

 

二、类型转换

 

一些常见的转换方式如下:

 

2.1、字符串转化为数字

${'300.001'?number} 结果为:300

如果用if进行判断的话,如下方式结果为不相等

<#if '300.001'?number == 300>
	  相等
<#else>
	  不相等
</#if>

右边和左边一样才相等

<#if '300.001'?number == 300.001>
	  相等
</#if>

 

2.2、数字转化为字符串

 

有以下两种方式,使用?c和?string进行转换

${300.001?c} 结果为:300.001
string(format)
format:数字格式

<${300.001?string("number")} 输出:300.001

<#if 300.001?string("number") == "300.001">
	  相等
<#else>
	  不相等
</#if>

freemarker自带了三种格式:number(数值),currency(货币)和percent(百分比) ,有以下两种写法   

${30?string("number")} 结果为:¥30
${30?string("curreny")} 结果为:¥30
${30?string("percent")} 结果为:3,000%
									
${30? string .number}   结果为:¥30
${30? string .currency} 结果为:¥30
${30? string .percent}	结果为:3,000%	 	

 

2.3、布尔值转换为字符串

 

true转为"yes",false转换为"no"

${true?string("yes","no")}

如果布尔值是true,那么返回"yes",否则返回"no",注意,左侧必须是布尔型才行,否则会报错。

 

2.4、字符串和日期转换

 

以下为了简单,全部使用了字符串进行转换,理论上后台应该是Date类型,然后在页面上使用以下方式进行转换:

 

2.4.1、字符串转 date

${"2021-04-28 11:31:56"?date("yyyy-MM-dd")}
输出为:2021-04-28

2.4.2、字符串转 time

如果是字符串的话,使用time,格式如下这种,运行会报错:

${"2021-04-28 11:31:56"?time("HH:mm:ss")}

左侧的字符串格式只能是HH:mm:ss才能进行转,左侧是

${"11:31:56"?time("HH:mm:ss")}

2.4.3、字符串转 datetime

${"2021-04-28 11:31:56"?datetime("yyy-MM-dd HH:mm:ss")}

使用string也能进行转换,createTime要是Date类型:

${createTime?string('yyyy-MM-dd HH:mm:ss')}

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值