include指令详解


java Freemarker中include指令用于导入文件,它可以在模版中插入其他的静态文件,或者是freemarker模版,这里通常引入的都是项目的公共部分,比如说网站的头部,以及版权信息等等。

定义

<#include path>
<#include path options>

path: 要包含文件的路径。可以使用相对路径和绝对路径。通常使用/(斜杠)来分割路径成分。(用其他话说, 它不用是一个固定的字符串,它也可以是像 profile.baseDir + "/menu.ftl" 这样的东西。)

options: 一个或多个这样的选项(encoding=encoding, parse=parse)

encoding: 算作是字符串的表达式。被包含文件从包含的文件继承的编码方式。(ISO-8859-2、UTF-8、GB2312)

parse: 算作是布尔值的表达式。默认是true。如果它为真,那么被包含的文件将会当做FTL来解析,否则整个文件将被当成简单文本来处理。(也就是说不会在其中查找FreeMarker结构)

ignore_missing: 算作是布尔值的表达式

例子

//父页面ftl
<html>  
  <head>  
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
  </head>  
  <body>  
     <#include "/inc/top.ftl"/>  
        姓名:${student.studentName}  
        性别:${student.studentSex}  
        年龄:${student.studentAge}  
        生日:${(student.studentBirthday)?string("yyyy-MM-dd")}  
        网站地址:${student.studentAddr}  
        QQ:${student.studentQQ}  
        <#if student.studentAge lt 12>  
             ${student.studentName}不是一个初中生  
        <#elseif student.studentAge lt 15>  
             ${student.studentName}不是一个高中生  
        <#elseif student.studentAge lt 18>  
             ${student.studentName}不是一个大学生  
        <#else>  
             ${student.studentName}是一个大学生  
        </#if>  
  </body>  
</html>

//子页面ftl

欢迎,进入学生管理系统!

Map < String,Object > root = null;
@Test public void testStudent() {
    //创建数据模型  
    root = new HashMap < String,
    Object > ();
    root.put("student", new Student("张三丰", "男", 16, new Date(1988 - 12 - 12), "http://www.codingdict.com", 78451214));
    student("student.ftl");
    studentFile("student.ftl", "student1.html");
}
private void student(String name) {
    ft.printFtl(name, root);
}
private void studentFile(String name, String fileName) {
    ft.printFile(name, root, fileName);
}

运行结果生成HTML页面:

<html>  
  <head>  
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
  </head>  
  <body>  
      <h1>欢迎,进入学生管理系统!</h1>  
        姓名:张三丰  
        性别:男  
        年龄:16  
        生日:1970-01-01  
        网站地址:http://www.codingdict.com
        QQ:78,451,214  
             张三丰不是一个大学生  
  </body>  
</html>

总结

  1. 被包含模板的输出格式是在include标签出现的位置插入的。

  2. include被包含的文件和包含它的模板共享变量,就好像是被复制粘贴进去的一样。

  3. 这个指令不可与JSP(Servlet)的include搞混,因为它不涉及到Servlet容器中,只是处理另外一个FreeMarker模板,不能"离开"FreeMarker。