freemarker 订阅
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据 [1]  。 展开全文
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据 [1]  。
信息
最新版本
FreeMarker 2.3.23
类    别
模板引擎
特    点
通用性高,模板语言强大
中文名
福瑞马克
外文名
FreeMarker
freemarker发展历史
FreeMarker最初的设计,是被用来在MVC模式的Web开发框架中生成HTML页面的,没有被绑定到Servlet或HTML或任意Web相关的东西上,它也可以用于非Web应用环境中。1999年末,FreeMarker的第一个版本出现在SourceForge网站上,它最初是由Benjamin Geer和Mike Bayer编写,他们定义了FreeMarker最基本的语法。FreeMarker 1获得了LGPL(宽通用公共许可证)的许可,其版权归属于Benjamin Geer。此外,Nicholas Cull、Holger Arendt等人对该项目也做出了主要贡献。在2002年初,Jonathan Revusky用JavaCC重写了FreeMarker的核心代码(语法和编译),虽然对FreeMarker 1尽量做到向后兼容,但几乎是完全重写了。Attila Szegedi对FreeMarker 2也有重要影响,除了重构和优化一些核心的API(应用程序编程接口),Attila还作为主要编写者实现了FreeMarker对日期、时间的支持,写出的freemarker.ext*包完成对javabean、Jython和XML的映射,以及HTTP servlet、JSP和Ant的集成。Dániel Dékány主要负责文档以及项目的维护(截至2011年,Dániel Dékány仍是该项目的主要维护者) [2]  。2002年3月18日,FreeMarker的第一个发布候选版2.0 RC1发布 [3]  ,又经过了2个候选版的BUG修复之后,正式版的Free Marker2.0于2002年4月18日发布 [4]  。2002年10月17日,FreeMarker 2.1 发布,该版本并不能与2.0版本兼容,所以使用者如果不是新建工程的话,需要重新审视已有的代码和模版 [5]  。由于项目没有法律实体,FreeMarker的2.0.x和2.1.x的版权仍归属Benjamin Geer。而在2002年12月制作2.2版本时,Benjamin Geer出于对自由开源许可的理解,将代码库版权转给Visigoth Software Society(西班牙的一个非营利性软件协会)和共同创办人Jonathan Revusky [2]  。2003年3月27日,FreeMarker 2.2 发布,这个版本引入了一些非常重要的新特性,但是有一些功能却不能逆向兼容 [6]  。在2.2的版本中,可能最重要的新特性就是namespace支持,这使得FreeMarker成为了合适大规模项目的工具,因为它允许不同页面分享的宏和变量没有任何名称空间冲突。同时,宏也变得更加强大,因为他们可以调用可选目标,并且宏现作为一流的变量,可以传递给其他宏使用。此外2.2中另一个吸引人的特性为,FreeMarker可以利用由第三方所写的JSP标记库 [7]  。在此之后,2.3版本之前,共更新了8个版本 [6]  。2004年6月15日,FreeMarker 2.3 发布,此版本对2.2系列进行了质量上的改进,以及引入了大量的新功能。最主要的改进点在于可以定义函数(方法)模版,插入字符串变量,支持宏参数和更为智能的默认对象包装。但2.3并不支持2.2.x的向后兼容,所以仅供新项目使用 [8]  。2005年1月4日的2.3.1版本到10月10日2.3.4版本主要是编写和维护一些新特性,以及BUG错误修复。2006年3月11日发布的2.3.5版本,因为发现严重错误而被撤回 [9]  ,在后续的2.3.6版本中修复。2.3.7时出了一个测试版本用于BUG修正和FreemarkerServlet的改进,其正式版中新增substring用于处理空的或缺失的变量 [10]  。 2006年7月9日发布2.3.8版本,提高了对JSP 2.0的兼容性 [11]  。2007年1月23日发布2.3.9版本,包含了对JDK 1.5枚举和通过BeansWrapper公共类字段的支持 [12]  。2007年4月20的2.3.10版本到2009年12月10日的2.3.16版本都是一些小性能改进和BUG修复。2011年5月17日,FreeMarker 2.3.17 发布,该版本主要进行了安全性的修复并扩充了一些内建函数 [13]  。2011年5月22日,FreeMarker 2.3.18 发布,修复jar包相关的bug [14]  。2012年2月29日,FreeMarker 2.3.19 发布,该版本修复了两个重要的bug,另外新增对JSON字符串进行处理的方法json_string等小改动 [15]  。2013年6月27日,FreeMarker 2.3.20 发布,主要对于使用IDE工具的修改 [16]  。2014年10月12日,FreeMarker 2.3.21 发布,对Java版本的最低要求从1.2变为1.4。由于旧的BSD风格许可不被OSI所承认,且Visigoth Software Society停滞不前,其许可变更为Apache 2.0版,所有者转为Attila Szegedi、Daniel Dekany和Jonathan Revusky(FreeMarker 2的主要开发者) [2]  。2015年3月1日,FreeMarker 2.3.22 发布,在FTL模板和Java方面做了一些更改 [17]  。2015年7月1日,FreeMarker经过投票进入了Apache Incubator,其项目授予给Apache软件基金会 [2]  。2015年7月5日,FreeMarker 2.3.23 发布,在FTL模板和Java上做了大量修改。尤其增加了list中items和else的字指令,使常见遍历任务更简单 [18]  。2015年9月2日,FreeMarker的主代码库从GitHub导入到Apache软件基金会的基础设施中发展 [2]  。2018年3月21日,FreeMarker在Apache Incubator中升级为顶级项目 [2]  。
收起全文
精华内容
下载资源
问答
  • Freemarker

    万次阅读 2019-09-09 23:21:06
    1. 什么是Freemarker 在java领域,表现层技术主要有三种:jsp、freemarker、velocity。 jsp是大家最熟悉的技术 优点: 1、功能强大,可以写java代码 2、支持jsp标签(jsp tag) 3、支持表达式语言(el) 4、官方...

    1. 什么是Freemarker

    在java领域,表现层技术主要有三种:jspfreemarkervelocity

    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分离

    JSP页面前后端的代码写到了一起,耦合度很高,前端开发需要熟悉后台环境,需要去调试。而让后台开发去做不熟悉的界面设计。对两者而言,交替性的工作需要花费一定的学习成本,效率低下。 使用FreeMarker后,前后端完全分离,大家各干各的,互不影响。
    JSP功能强大,可以写Java代码,但是页面会有大量业务逻辑,不利于维护和阅读,更不利于前后台分工,容易破坏MVC结构,所以舍弃JSP,选择使用FreeMarker是大势所趋。
    众所周知,JSP在第一次执行的时候需要转换成Servlet类,之后的每次修改都要编译和转换。这样就造成了每次修改都需要等待编译的时间,开发效率低下。 而FreeMarker模板技术并不存在编译和转换的问题,所以就不会存在上述问题。相比而言,使用freeMark可以提高一定的开发效率

    FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。

    目前企业中:主要用Freemarker做静态页面或是页面展示

    2. Freemarker的使用方法

    把freemarker的jar包添加到工程中。
    Maven工程添加依赖

    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.23</version>
    </dependency>

    使用步骤:
    第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。
    第二步:设置模板文件所在的路径。
    第三步:设置模板文件使用的字符集。一般就是utf-8.
    第四步:加载一个模板,创建一个模板对象。
    第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。
    第六步:创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。
    第七步:调用模板对象的process方法输出文件。
    第八步:关闭流。

    模板:
    ${hello} 

    @Test
        public void genFile() throws Exception {
            // 第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。
            Configuration configuration = new Configuration(Configuration.getVersion());
            // 第二步:设置模板文件所在的路径。
            configuration.setDirectoryForTemplateLoading(new File("D:/workspaces-itcast/term197/taotao-item-web/src/main/webapp/WEB-INF/ftl"));
            // 第三步:设置模板文件使用的字符集。一般就是utf-8.
            configuration.setDefaultEncoding("utf-8");
            // 第四步:加载一个模板,创建一个模板对象。
            Template template = configuration.getTemplate("hello.ftl");
            // 第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。
            Map dataModel = new HashMap<>();
            //向数据集中添加数据
            dataModel.put("hello", "this is my first freemarker test.");
            // 第六步:创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。
            Writer out = new FileWriter(new File("D:/temp/term197/out/hello.html"));
            // 第七步:调用模板对象的process方法输出文件。
            template.process(dataModel, out);
            // 第八步:关闭流。
            out.close();
        }

    3. 模板的语法

    访问map中的key
    ${key}

    访问pojo中的属性
    Student对象。学号、姓名、年龄
    ${key.property}

    取集合中的数据
    <#list 集合 as 循环的变量>

    <#list studentList as student>
    ${student.id}/${studnet.name}
    </#list>

    去循环中的下标

    <#list studentList as student>
        ${student_index}
    </#list>

     判断

    <#if student_index % 2 == 0>
    <#else>
    </#if>

     日期类型格式化 

     

    Null值的处理

    Include标签

    4. Freemarker整合spring

    4.1. 创建整合spring的配置文件

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">

        <property name="templateLoaderPath" value="/WEB-INF/ftl/" />

        <property name="defaultEncoding" value="UTF-8" />

        <property name="freemarkerSettings">

        <!-- 设置默认的编码方式,原先是GBK,需要设置成utf-8 -->

        <props>

            <!--用于解决前端报空指针问题 不用再空值后面+ !号-->

            <prop key="classic_compatible">true</prop>

            <!-- <prop key="defaultEncoding">utf-8</prop>

            <prop key="template_exception_handler">rethrow</prop>

        </props>

        </property>

      </bean>

    </beans>

    需要编写一Controller进行测试

    4.2 Controller

    请求的url:/genhtml
    参数:无
    返回值:ok (String, 需要使用@ResponseBody)
    业务逻辑:
    1、从spring容器中获得FreeMarkerConfigurer对象。
    2、从FreeMarkerConfigurer对象中获得Configuration对象。
    3、使用Configuration对象获得Template对象。
    4、创建数据集
    5、创建输出文件的Writer对象。
    6、调用模板对象的process方法,生成文件。
    7、关闭流。

    加载配置文件:

    @Controller
    public class HtmlGenController {
        
        @Autowired
        private FreeMarkerConfigurer freeMarkerConfigurer;
    
        @RequestMapping("/genhtml")
        @ResponseBody
        public String genHtml()throws Exception {
            // 1、从spring容器中获得FreeMarkerConfigurer对象。
            // 2、从FreeMarkerConfigurer对象中获得Configuration对象。
            Configuration configuration = freeMarkerConfigurer.getConfiguration();
            // 3、使用Configuration对象获得Template对象。
            Template template = configuration.getTemplate("hello.ftl");
            // 4、创建数据集
            Map dataModel = new HashMap<>();
            dataModel.put("hello", "1000");
            // 5、创建输出文件的Writer对象。
            Writer out = new FileWriter(new File("D:/temp/term197/out/spring-freemarker.html"));
            // 6、调用模板对象的process方法,生成文件。
            template.process(dataModel, out);
            // 7、关闭流。
            out.close();
            return "OK";
        }
    }

    5. 商品详情页面静态化

    5.1 网页的静态化方案
    输出文件的名称:商品id+“.html”
    输出文件的路径:工程外部的任意目录。
    网页访问:使用nginx访问网页。在此方案下tomcat只有一个作用就是生成静态页面。
    工程部署:可以把taotao-item-web部署到多个服务器上。
    生成静态页面的时机:商品添加后,生成静态页面。可以使用Activemq,订阅topic(商品添加)

    3.5.2. MessageListener
    需要实现MessageListener,把Active的客户端jar包的依赖添加到工程中。

    业务逻辑:
    1、创建一个MessageListener接口的实现类
    2、从message中取商品id
    3、查询商品基本消息、商品描述。
    4、创建商品详情页面的模板。
    5、指定文件输出目录
    6、生成静态文件。

    安装http服务器。 

    public class HtmlGenListener implements MessageListener {
    
        @Autowired
        private ItemService itemService;
        @Autowired
        private FreeMarkerConfigurer freeMarkerConfigurer;
        @Value("${HTML_OUT_PATH}")
        private String HTML_OUT_PATH;
        
        @Override
        public void onMessage(Message message) {
            try {
                // 1、创建一个MessageListener接口的实现类
                // 2、从message中取商品id
                TextMessage textMessage = (TextMessage) message;
                String strItemId = textMessage.getText();
                Long itemId = new Long(strItemId);
                // 3、查询商品基本消息、商品描述。
                TbItem tbItem = itemService.getItemById(itemId);
                Item item = new Item(tbItem);
                TbItemDesc tbItemDesc = itemService.getItemDescById(itemId);
                //创建数据集
                Map data = new HashMap<>();
                data.put("item", item);
                data.put("itemDesc", tbItemDesc);
                // 4、创建商品详情页面的模板。
                // 5、指定文件输出目录
                Configuration configuration = freeMarkerConfigurer.getConfiguration();
                Template template = configuration.getTemplate("item.htm");
                FileWriter out = new FileWriter(new File(HTML_OUT_PATH + itemId + ".html"));
                // 6、生成静态文件。
                template.process(data, out);
                //关闭流
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }

     3.5.3. Spring配置文件

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">

      <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->

      <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">

         <property name="brokerURL" value="tcp://192.168.25.168:61616" />

      </bean>

      <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->

      <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">

        <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->

        <property name="targetConnectionFactory" ref="targetConnectionFactory" />

      </bean> <!--这个是主题目的地,一对多的 -->

      <bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">

        <constructor-arg value="item-add-topic" />

      </bean>

      <!-- 配置消息监听器 -->

      <bean id="htmlGenListener" class="com.taotao.item.listener.HtmlGenListener"/>

        <!-- 配置监听容器 -->    

        <!-- 消息监听容器 -->

        <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">

        <property name="connectionFactory" ref="connectionFactory" />

        <property name="destination" ref="topicDestination" />

        <property name="messageListener" ref="htmlGenListener" />

      </bean>

    </beans>

    附加:Freemarker生成Java代码:https://www.cnblogs.com/itdragon/p/7750903.html

    展开全文
  • FreeMarker

    2014-01-15 08:22:10
    FreeMarker详解,内包括freemarker教程_中文版、freemarker中文参考手册、FreeMarker标签使用、freemarker学习文档、freemarker根据模版生成文件使用例子 等文档
  • freemarker

    2018-12-17 16:48:05
    freemarker freemarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,...

    freemarker

    freemarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarkerWeb容器无关,即在Web运行时,它并不知道ServletHTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XMLJSPJava 等。

    引入freemarker依赖

    <dependency>

      <groupId>org.freemarker</groupId>

      <artifactId>freemarker</artifactId>

      <version>2.3.23</version>

    </dependency>

     

    freemarker原理

    模板 + 数据模型 = 输出

    对象的访问

    Person p  = new Person();
    Map root = new HashMap();
    root.put(“person”,p);
    
    freemarker.html内容如下:
    ${person.id}=${person.name}
    

    历遍集合/数组

    List<Person> persons = new ArrayList<Person>();
    
    //页面中内容
    
    <#list persons as p>
    ${p.id}/${p.name}
    </#list>
    
    获取当前选代的索引:<br/>
    <#list persons as p>
    	${p_index}
    </#list>
    
    

    if

    逻辑运算符(==   !=   ||   &&)
    
    <html>
    <body>
    	<#list persons as p>
    		<#if p_index%2 != 0 || p_index==0>
    			输出一行字
    		</#if>
    		index:${p_index}|${p.id}:${p.name}<br>
    	</#list>
    </body>
    </html>
    

    else

    <html>
    <body>
    	<#list persons as p>
    		<#if p_index%2 != 0 || p_index==0>
    			<span style="color:red">
    				index:${p_index}|${p.id}:${p.name}<br>
    			</span>
    		<#else>
    			<span style="color:blue">
    				index:${p_index}|${p.id}:${p.name}<br>
    			</span>
    		</#if>
    	</#list>
    </body>
    

    格式化日期

    默认格式
    1:date
    ${cur_time?date}
    2:datetime
    ${cur_time?datetime}
    3:time
    ${cur_time?time}
    
    自定义格式
    ${cur_time?string("yyyy-MM-dd HH:mm:ss")} 

     null处理

    root.put(“val”,null);
    
    解决办法
    1:null 变 空串
    ${val!}     ${val!"这里是空"}
    2:为Null时给默认值
    ${val!“我是默认值"}
    3:
    <#if curdate ??>
    属性不为空
    <#else>
    属性为空
    <#/if>
    

     引页面

    将另一个页面引入本页面时可用以下命令完成
    
    <#include "/include/head.html">
    

    freemaker整合spring

     

    添加依赖:
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-context-support</artifactId>
    	<version>4.1.3.RELEASE</version>
    </dependency>
    <dependency>
    	<groupId>org.freemarker</groupId>
    	<artifactId>freemarker</artifactId>
    	<version>2.3.23</version>
    </dependency>
    
    
    在ApplicationContext.xml中添加如下内容:
    <bean id="freemarkerConfig"	class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    	<property name="templateLoaderPath" value="/WEB-INF/freemarker/" />
    	<property name="defaultEncoding" value="UTF-8" />
    </bean>
    
    代码:
    Configuration configuration = freeMarkerConfigurer.getConfiguration();
    Template template = configuration.getTemplate("item.ftl");
    Map root = new HashMap();
    //取商品信息
    ....
    FileWriter out = new FileWriter(new File(HTML_GEN_PATH + id + ".html"));
    template.process(root, out);
    out.flush();
    out.close();
    

     

    更为详细的网页版学习资料,可在上传的资源中下载

     

    展开全文
  • freeMarker

    千次阅读 2012-08-24 09:31:44
    使用freemarker实际上就是做前端展示,相当于html与jsp之外的另一种选择方案;比如html中不能使用Java对象,而jsp又会常常嵌套大量Java代码这两种从某种意义上都有一定的弊端;而freemarker却相当于整合了html和jsp...

         使用freemarker实际上就是做前端展示,相当于html与jsp之外的另一种选择方案;比如html中不能使用Java对象,而jsp又会常常嵌套大量Java代码这两种从某种意义上都有一定的弊端;而freemarker却相当于整合了html和jsp的优势吧!比如:在freemarker中我可以使用html标签,同时可以使用EL表达式来获取Java对象,并通过freemarker的特有的一些指令来处理Java对象,但是又不涉及到实质上的Java代码!

         因此freemarker可以有效的阻止Java代码的嵌入;而且freemarker可以自定义自己的宏macro(相当于标签)。

    展开全文
  • freemarker类型转换

    千次阅读 多人点赞 2019-07-31 19:13:33
    Freemarker 中预订义了三种数字格式:number,currency(货币)和percent(百分比)其中number为默认的数字格式转换 例如: ${tempNum} ${tempNum? string .number}或${tempNum? string ("number")} 结果为20 ${...

    #操作字符串函数
    ##1. substring(start,end)从一个字符串中截取子串
    start:截取子串开始的索引,start必须大于等于0,小于等于end
    end: 截取子串的长度,end必须大于等于0,小于等于字符串长度,如果省略该参数,默认为字符串长度。
    例子:

    ${'str'?substring(0)} 结果为str  
    ${'str'?substring(1)} 结果为tr  
    ${'str'?substring(2)} 结果为r  
    ${'str'?substring(3)} 结果为  
    ${'str'?substring(0,0)} 结果为  
    ${'str'?substring(0,1)} 结果为s  
    ${'str'?substring(0,2)} 结果为st  
    ${'str'?substring(0,3)} 结果为str  
    

    ##2. cap_first 将字符串中的第一个单词的首字母变为大写。

    ${'str'?cap_first} 结果为Str  
    

    ##3. uncap_first将字符串中的第一个单词的首字母变为小写。

    ${'Str'?cap_first} 结果为str  
    

    ##4. capitalize将字符串中的所有单词的首字母变为大写

    ${'str'?capitalize} 结果为STR  
    

    ##5. date,time,datetime将字符串转换为日期
    例如:

    <#assign date1="2009-10-12"?date("yyyy-MM-dd")>
    <#assign date2="9:28:20"?time("HH:mm:ss")>
    <#assign date3=" 2009-10-12 9:28:20"?time("HH:mm:ss")>
    ${date1} 结果为2009-10-12  
    ${date2} 结果为9:28:20  
    ${date3} 结果为2009-10-12 9:28:20  
    

    注意:如果指定的字符串格式不正确将引发错误。
    ##6. ends_with 判断某个字符串是否由某个子串结尾,返回布尔值。

    ${"string "?ends_with("ing")?string } 返回结果为true
    

    注意:布尔值必须转换为字符串才能输出
    ##7. html 用于将字符串中的<、>、&和“替换为对应的

    &lt;&gt;&quot:&amp  
    

    ##8. index_of(substring,start)在字符串中查找某个子串,返回找到子串的第一个字符的索引,如果没有找到子串,则返回-1。
    Start参数用于指定从字符串的那个索引处开始搜索,start为数字值。
    如果start大于字符串长度,则start取值等于字符串长度,如果start小于0, 则start取值为0。

    ${" string "?index_of("in") 
    

    结果为3

    ${" string "?index_of("ab")
    

    结果为-1
    ##9. length返回字符串的长度

    ${" string "?length} 结果为6  
    

    ##10. lower_case将字符串转为小写

    ${" STRING "?lower_case} à 结果为 string  
    

    ##11. upper_case将字符串转为大写

    ${" string "?upper_case} à 结果为 STRING  
    

    ##12. contains 判断字符中是否包含某个子串。返回布尔值

    ${" string "?contains("ing")? string } 结果为true  
    

    注意:布尔值必须转换为字符串才能输出
    ##13. number将字符串转换为数字

    ${"111.11"?number} 结果为111.11  
    

    ##14. replace用于将字符串中的一部分从左到右替换为另外的字符串。

    ${"strabg"?replace("ab","in")} 结果为 string  
    

    ##15. split使用指定的分隔符将一个字符串拆分为一组字符串

    <#list "This|is|split"?split("|") as s>
      ${s}
    </#list>
    

    结果为:
    This
    is
    split

    ##16. trim 删除字符串首尾空格

    ${" String "?trim} 结果为 String  
    

    #操作数字
    ##1. c 用于将数字转换为字符串

    ${123?c} 结果为123  
    

    ##2. string 用于将数字转换为字符串
    Freemarker 中预订义了三种数字格式:number,currency(货币)和percent(百分比)其中number为默认的数字格式转换
    例如:

    <#assign tempNum=20>
    ${tempNum}   
    ${tempNum? string .number}或${tempNum? string ("number")} 结果为20  
    ${tempNum? string .currency}或${tempNum? string ("currency")} 结果为¥20.00  
    ${tempNum? string . percent}或${tempNum? string ("percent")} 结果为2,000%  
    

    #操作布尔值
    string 用于将布尔值转换为字符串输出
    true转为"true",false转换为"false"

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

    如果布尔值是true,那么返回"yes",否则返回no

    展开全文
  • freemarker语法

    2017-12-20 21:02:44
    freemarker freemarker freemarker freemarker freemarker freemarker freemarker freemarker
  • FreeMarker手册

    2018-03-02 17:05:30
    FreeMarkerFreeMarkerFreeMarkerFreeMarkerFreeMarker
  • freemarker 模板刷新freemarker 模板刷新freemarker 模板刷新freemarker 模板刷新freemarker 模板刷新freemarker 模板刷新
  • FreeMarker模版

    2018-09-11 15:47:39
    FreeMarker模版 pdf 培训材料
  • Freemarker 实例,Freemarker 实例Freemarker 实例,Freemarker 实例
  • FreeMarker Demo

    热门讨论 2013-12-06 11:55:05
    这是一个java项目 下载这个示例 轻松搞定FreeMarker 包括: FreeMarker 解析javabean FreeMarker 解析map FreeMarker 解析list include标签用法
  • freemarker.jar freemarker架包 freemarker生成excel、word、html、xml简单例子freemarker生成excel、word、html、xml简单例子
  • # freemarker模板引擎 spring.freemarker.allow-request-override=true spring.freemarker.allow-session-override=true spring.freemarker.cache=false spring.freemarker.check-template-location=true spring....
  • Freemarker自定义方法

    2015-09-08 16:55:15
    Freemarker
  • freemarker Demo 适用于freemarker初学

    热门讨论 2011-10-28 11:46:22
    freemarker的使用Demo,非常适用于freemarker初学,可与struts2结合使用。
  • Freemarker教程

    千次阅读 2017-03-17 13:30:57
    Freemarker 是一款模板引擎,是一种基于模版生成静态文件的通用 工具,它是为java程序员提供的一个开发包,或者说是一个类库,它不是面向最终用户的,而是为程序员提供了一款可以嵌入他们开发产品的应用程序。...
  • FreeMarker 入门视频教程

    千人学习 2018-07-18 17:06:00
    FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 l FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 l 虽然FreeMarker具有一些编程的能力,但通常由Java程序...
  • freemarker使用

    2019-04-02 17:34:00
    获得FreeMarker 官网:http://freemarker.org/ 中文帮助文档:https://sourceforge.net/projects/freemarker/files/chinese-manual/ 下载FreeMarker jar包:下载地址...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,779
精华内容 11,911
关键字:

freemarker