Freemarker模板引擎_.ftl 数字转字符串-程序员宅基地

技术标签: Freemarker  

  • Freemarker:(目前用的最稳定的版本是2.3.24-15年7月 )
    • 是一款模板引擎: 即一种基于模板和要改变的数据,	并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。	它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
      
    • FTL指令(ftl(FreeMarker TemplatLanguage|)是Freemarker模板的文件后缀名)
      FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据 。

jsp. velocity. freemarker优缺点
jsp是大家最熟悉的技术
优点:
1、功能强大,可以写java代码
2、支持jsp标签(jsp tag)
3、支持表达式语言(el)
4、官方标准,用户群广,丰富的第三方jsp标签库
5、性能良好。jsp编译成class文件执行,有很好的性能表现
缺点:
jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。

velocity是较早出现的用于代替jsp的模板语言
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能良好,据说比jsp性能还要好些
3、使用表达式语言,据说jsp的表达式语言就是学velocity的
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多。
3、对jsp标签支持不够好

freemarker
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能非常不错
3、对jsp标签支持良好
4、内置大量常用功能,使用非常方便
5、宏定义(类似jsp标签)非常方便
6、使用表达式语言
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多

选择freemarker的原因:
1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。
2、宏定义比jsp tag方便
3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便
4、支持jsp标签

5、可以实现严格的mvc分离

FTL指令(ftl(FreeMarker TemplatLanguage|)是Freemarker模板的文件后缀名)

1.assign指令:

此指令用于在页面上定义一个变量

<#assign linkman =“李先生”>

联系人:${linkman}

<#asssign info={“mobile”:“13888888888”,‘address’:‘北京市海淀区中关村街’}>

电话: ${info.mobile} 地址: ${info.address}

2.include 指令:

此指令用于模板文件的嵌套

创建模板文件 helloworld.ftl

    <h1>helloworld<h1>

修改test.ftl,在末班文件中使用include指令引入helloworld模板

<#include “helloworld.ftl”>

3.if指令:(= ==没区别)

<#if success=true>

	可以访问

<#else>

	不可以访问

</#if>

4.list指令:

如果需要显示当前循环到第几项,可以这样写

<#list ["hello","world"] as word>
    <span>${word_index+1},${hi}</span></br>
< /#list>

_has_next判断是否最后一项
有时候,最后一项在显示的时候可能要做特殊处理,例如不加逗号

<#list [“hello”,“world”] as word>

${word}<#if word_has_next>,</#if></#list>

break退出循环

如果想在循环中判断到某一项时退出,可以这样做

<#list users as user>
${ user.name}
<#if user.name == “administrator”><#break></#break>

< /#list>

5.转化jason字符串为数据:

<#assign text="{'bank':'花旗银行','account':'10101921233453020'}" />

<#assign data=text?eval />

开户行:${data.bank}  账号:${data.account}

6.日期格式化:

 dataModel.put("today",new Date())

     当前日期:${today?date} <br>

    当前时间:${today?time} <br>

当前日期+时间:${today?datetime} <br> 	日期格式化:  ${today?string("yyyy年MM月")}

7.数字转字符串:

map.put("value",999);

经验值:${value}

8.判断变量是否存在:??

变量??,如果该变量存在,返回true,否则返回false

<#if aaa??>

aaa变量存在

<#else>

aaa变量不存在

</#if>

9 !:

${a ! ‘helloword’}

在代码中不对a赋值,也不会报错了 ,当a为null则返回!后边的内容-

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43595438/article/details/84851587

智能推荐

星际反作弊2.3for-win7-xp-win8-win10-程序员宅基地

文章浏览阅读1.4k次。星际反作弊2.3for-win7-xp-win8-win10下载地址 http://wj800.com/rar/scfzb.zip转载于:https://www.cnblogs.com/cfas/p/5319883.html_eud editor

unity. Scroll View滑动翻页吸附_unity scroll view 滑动吸附-程序员宅基地

文章浏览阅读530次。using DG.Tweening;using KetosGames.SceneTransition;using UnityEngine.Events;using UnityEngine.UI;using System.Collections;using System.Collections.Generic;using UnityEngine;//翻页吸附public class SwitchPage : MonoBehaviour{ private const float SMO_unity scroll view 滑动吸附

解决gradle项目无法下载依赖_unity使用implementation无法下载gradle的依赖-程序员宅基地

文章浏览阅读2w次。1 在build.gradle文件下的repositories内注释掉 mavenCentral()默认方法,加入maven{url ‘http://maven.aliyun.com/nexus/content/groups/public/’}的仓库地址如图:2 点击refresh按钮即可..._unity使用implementation无法下载gradle的依赖

【问题已解决】安装Anaconda后,将本地python版本覆盖_anaconda重装后数据如何覆盖-程序员宅基地

文章浏览阅读1.6k次,点赞4次,收藏5次。问题来源:安装Anaconda后(对应python3.6.1),将本地python版本(python3.6.8)覆盖解决方法:环境变量中将python3.6.8的地址上移_anaconda重装后数据如何覆盖

micropython(4):使用ESP8266 控制 oled 屏幕,并显示 helloworld 字符_用arduino esp8266控制oled中,关于汉字的字模应该放在代码哪个位置?-程序员宅基地

文章浏览阅读5.2k次。目录前言1,关于upycraft2,使用3,总结前言相关micropython 全部分类:https://blog.csdn.net/freewebsys/category_9670462.html本文的原文连接是:https://blog.csdn.net/freewebsys/article/details/104006687未经博主允许不得转载。博主地址是:http://bl..._用arduino esp8266控制oled中,关于汉字的字模应该放在代码哪个位置?

7 「建造毛坯」- 双端路由同构-程序员宅基地

文章浏览阅读167次。导读本节标题:「建造毛坯」- 双端路由同构本节主旨: 继续以发现问题,分析问题,解决问题的思路,来实现多路由的双端同构,重点在于服务端和客户端如何处理本节配套代码:https://github.com/Bigerfe/koa-react-ssr/tree/better/packages/my-react-ssr2正文前面几节我们实现了一个最基础的 react ssr,同时也初步接触了同..._路由同构

随便推点

android底部弹出可滑动选择器_android 滑动选择框 csdn-程序员宅基地

文章浏览阅读2.2k次,点赞4次,收藏10次。项目正好有类似需求,这里直接上一个轮子:PickerView,GitHub地址具体实现关键代码:@Override public void initView() { initOptionPicker(); //一定要在开始调用方法初始化选择器 }//初始化选择器方法具体参数参考githubprivate void initOptionPicker() { //条件选择器初始化 pvOptions = new OptionsPickerB_android 滑动选择框 csdn

openstack(train版)快速安装部署-neutron网络服务_控制节点(七)_openstack train dnsmasq-程序员宅基地

文章浏览阅读339次。1)mysql添加数据库CREATE DATABASE neutron;GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '123456';GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '123456';2)、建立用户/服务/API:openstack user create --domain default --pas_openstack train dnsmasq

分布式系统唯一ID生成方案浅析_设计分布式下唯一id 你会考虑哪些因素-程序员宅基地

文章浏览阅读328次。分布式系统唯一ID生成方案浅析在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。业务ID需要满足的要求如下全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。趋势递增:在MySQL InnoDB引擎中使用的是聚集索引,由于多数RDBMS使用B-tree的数据结构来存储索引数据,在主键的选择上面我们应该尽量使用有序的主键保证写入性能。单调递增:保证下一个ID一定大..._设计分布式下唯一id 你会考虑哪些因素

python邮件发送给多人时,只有第一个人能收到的问题_python向多人发邮件,邮件上可以显示这些人的邮箱地址,但是却收不到-程序员宅基地

文章浏览阅读1.3w次,点赞7次,收藏5次。问题:在python3.5中使用sendmail进行邮件发送,mailInfo["to"]为逗号分隔的str类型,结果只有第一个邮件地址能收到邮件。解决方法:经过多次测试发现MIMEText()["to"]的数据类型与sendmail(from_addrs,to_addrs,...)的to_addrs不同;前者为str类型,多个地址使用逗号分隔,后者为list类型。解决示例如下:._python向多人发邮件,邮件上可以显示这些人的邮箱地址,但是却收不到

云安全最佳实践 | 如何利用云原生AWS服务加强安全态势?-程序员宅基地

文章浏览阅读2.2k次。新钛云服已为您服务1282天云基础设施越来越容易受到威胁,因此我们研究如何使用最佳实践和云原生 AWS 服务来改善安全状况。据 Sophos 称,在 2020 年,超过70% 的将其工作负..._aws安全态势感知

【JAVA编程】计算抽奖中奖的概率_java 计算抽奖中奖概率 1-50的数字取6个数字来抽奖-程序员宅基地

文章浏览阅读1k次。题目:计算抽奖游戏中奖的概率,如果必须从1-50中抽取6个数字来抽奖,会有(50x49x48x47x46x45)/(1x2x3x4x5x6)种可能结果,所以中奖的概率为1/12590700源码:..._java 计算抽奖中奖概率 1-50的数字取6个数字来抽奖

推荐文章

热门文章

相关标签