• 初始FreeMake


    此文章是观看视频学习的,只是一点点基础还不太深

    视频地址:http://www.icoolxue.com/play/5773

    源码:码云:https://gitee.com/wmjGood/FreeMaker

    FreeMarker.语言概述

    Frellarker是一一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。

    Freellarker.被设计用来生成HTIlL Web页面,特别是基于MVC模式的应用程字。

    虽然EreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由Frellarker生成页面,通过模板显示准备的数据

      Freellarker不是一个Web应用框架,而适合作为Web应用框架一个组件模型容器是个map集合

          Freellarker.与容器无关,因为它并不知道HTTPServlet; Frellarker 同样可以应用于非Web应用程序环境。

          FrelMarker.更适合作为Mode12框架(Struts)的视图组件,你也可以在模板中使用JSP标记库。心

          Frellarker是免费的

    FreeMarker特性

    通用目标

    能够生成各种文本,HTMLXMLL RTFJava 源代码等等易于嵌入到你的产品中,轻量级;不需要Servlet环境+

    插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等+

    你可以按你所需生成文本:保存到本地文件,作为Email发送;Web应用程序发送它返回给Web浏览器

    强大的模板语言

    所有常用的指令: indudeifelseif/else. 循环结构,在模板中创建和改变变量,

    几乎在任何地方都可以使用复杂表达式来指定值,命名的宏,可以具有位置参数和嵌套内容。

    名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突,

    输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等,你可以定义自己的转换

    通用数据模型

    FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示。

    你可以使用抽象(接口)方式表示对象(JavaBean. XML文档、SQL 查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰。

    Web准备

    在模板语言中内建处理典型Web相关任务(HTML转义)的结构。能够集成到Model2 Web应用框架中作为JSP的替代。支持JSP标记库

    MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员

    强大的XML处理能力

    < #reaurse>< #visit>指令(2.3版本)用于递归遍历XML树。在模板中精楚和直觉的访问XML对象模型。开源论坛IForum 就是使用了Freellarker 做为页面模板。

    智能的国际化和本地化

    字符集智能化(内部使用UNICODE)。数字格式本地化敏感山

    日期和时间格式本地化敏感。

    US字符集可以用作标识(如变量名)。多种不同语言的相同模板

    FreeMaker第一个案例

    1.创建idea项目,导入pom节点(第一次很慢)

    <!-- https://mvnrepository.com/artifact/com.quhaodian/freemaker -->
    <dependency>
      <groupId>com.quhaodian</groupId>
      <artifactId>freemaker</artifactId>
      <version>1.8.1</version>
    </dependency>

     2.在项目下创建名为“template”的目录,在目录下创建名为a.ftlftlfreemaker template

     

    a.ftl文件中内容如下:

     

    3.src下创建测试类Demo

    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import freemarker.template.TemplateException;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.util.HashMap;
    import java.util.Map;
    
    public class Demo {
        public static void main(String[] args) {
            Writer writer=null;
            try {
                //创建freemaker实例
                Configuration config=new Configuration();
                //模板加载
                config.setDirectoryForTemplateLoading(new File("templete"));
                //创建数据模型
                Map map=new HashMap();
               //此处的user的名字要和a.ftl中的一致
                map.put("user","wmj");
                //加载模板文件
                Template template=config.getTemplate("a.ftl");
                //显示生成数据
                 writer=new OutputStreamWriter(System.out);
                template.process(map,writer);
                writer.flush();
    
            } catch (IOException e) {
                e.printStackTrace();
            } catch (TemplateException e) {
                e.printStackTrace();
            }finally {
                if (writer!=null) {
                    try {
                        writer.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    结果:

    数据类型

     

     

     

     

    指令

    if语句(在a.ftl文件中)

    你好啊,${user} ,今天好冷啊
    <#--在模板中单双引号都可以-->
    <#if user=="wmj">
        wmj!
    </#if>

    if else指令

    分数:${random}
    <#-- > <是特殊字符 在html中用的是gt(>)  lt(<) 这里也是 gte(大于等于) -->
    <#if random gt 20><#else >
        不好
    </#if>
    <#if random gt 90>
        hao
        <#elseif random gt 60 >
       yiban
        <#else>
         cha
    </#if>

    list指令

    List list=new ArrayList();
    list.add(new Address("中国","上海"));
    list.add(new Address("美国","纽约"));
    list.add(new Address("日本","东京"));
    map.put("list",list);
    
    <#--address变量名  变量名.属性-->
    <#list list as address >
         <span>${address.country}</span>
    </#list>

    include指令

    在目录下创建readme.txt文件 
    <#include "readme.txt"/>

    macore自定义指令

    <#--自定义指令(宏指令) m1=方法名-->
    <#macro m1>
    <span>1</span>
    <span>2</span>
    </#macro>
    <@m1></@m1> <#--调用m1指定 调用几次都可以-->

    带参数的宏语句

    <#--代参数-->
    <#macro m2 a b c>
    ${a}
    ${b}
    ${c}
    </#macro>
    <#--不用管数据类型,会自动检测-->
    <@m2 "小花" "小黑" "小白" />

    nested指令

    <#--nested(嵌入)指令-->
    <#macro border>
    <table border="4" cellspacing="0" cellpadding="4">
      <tr>
        <td>
           <#nested ><#--表格内容-->
        </td>
      </tr>
    </table>
    </#macro>

    <@border> dsadadasdas<#--表格内容--> </@border>

    结果:

    assign指令(定义变量)

    <#assign mail="2116743767qq.com" >
    //获取值
    邮箱:${mail}

    import指令

    在目录下创建b.ftl
    <#macro name age>
    <p>年龄 ${age}</p>
    
    </#macro>
    <#--定义变量-->
    <#assign mail="1212212.com">
    
    在a.ftl中
    <#--引用b.ftl person变量名 -->
    <#import "b.ftl" as person >
    <@person.name age="12"/>
    ${person.mail}
    
    <#--改变b.ftl中的mail值-->
    <#assign mail="5555" in person>
    ${person.mail}

    结果:

    宏指令有没有返回值??????

    宏指的是<#macro>,函数指的是<#function>,都允许设置参数,内部可以包含流程控制语句。

    区别如下:

    • 宏内部的Html代码会直接显示在页面上,更适合用来封装一些页面组件,宏不允许有返回值,如果设置返回值,将直接报错。
    • 函数用来写一些仅用于计算的代码块,内部即便写了Html代码,页面也是不会显示的,函数可以有返回值。

     链接:

    https://blog.csdn.net/chen413203144/article/details/78279153

    <#function Add a b>
     <#--函数就算写了其它页面代码也不会显示-->
     <font>asdadadad</font> 
    <#assign sum = a+b>
     <#return sum/> 
    </#function> 
    ${Add(1, 2)}  
  • 相关阅读:
    LoadRunner FAQ
    LoadRunner下载文件脚本
    Loadrunner上传文件解决办法(大文件)
    LoadRunner中的IP欺骗的设置以及误区
    Loadrunner11在win7下录制脚本,ie打不开
    LoadRunner检查点实战
    设置Loadrunner负载机临时文件目录
    ArcGIS中国工具,版权声明,本人没有授权任何单位和个人销售,其他都是盗版,为了你个人和单位利益,请勿购买。 销售QQ:27652980,853740877,电话:18987281928,13108507190,qq群310964401
    勘测定界软件,增加平方米和公顷,小数进位面积不平,自动调平功能;不够线状扣除负面积自动处理功能 ​​​​
    arcgis 获得工具箱工具的个数
  • 原文地址:https://www.cnblogs.com/luoxionghenku/p/9633818.html
Copyright © 2020-2023  润新知