FreeMarker基本标签的使用

2012-12-04|来源: 黄奕能

上一节我们接触了一个FreeMarker很简单的例子FreeMarker入门教程,说到底,就是替换模板里相应的标签,这一节我们写一下FreeMarker基本标签的使用


FreeMarker入门教程,相信你还刻模板里的“你好:${username}”,这是简单的输出字符串,和EL很像吧,这一节我们来学其他标签


输出对象及判断标签的引用

我们先定义一个用户类

package com.naxsu.freemarker;
public class User {
    private int id;
    private String name;
    private int age;
    // set get method
    public User(int id, String name, int age) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
    }
    public User() {
        super();
    }
}

模板中输出用户的相关属性值和对年龄的简单判断文件03.ftl如下

${user.id}-----${user.name}-----${user.age}</h1>
 
<#if user.age lt 12>
    ${user.name}还是一个小孩
<#elseif user.age lt 18>
    ${user.name}快成年
<#else>
    ${user.name}已经成年
</#if>

测试及输出结果

@Test
public void test02() {
    //输出相应的对象
    root.put("user", new User(1,"李四",16));
    fu.print("03.ftl", root);
  }

1-----李四-----16</h1>
 
    李四快成年


循环标签的使用

声明两个用户对象,然后在模板文件中循环输出

@Test
public void test02() {
      List<User> users = Arrays.asList(
            new User(1,"张三",22),new User(2,"李四",33));
    root.put("users",users);
    fu.print("03.ftl", root);
}

模板文件,主要是应用循环标签

<#list users as user>
${user.id}---------${user.name}-------${user.age}
</#list>

输出:

1---------张三-------22

2---------李四-------33


页面包含

如果是一个top文件,你想包含在HTML中,即用include 标签

被包含模板文件top.ftl:

<h1>欢迎${username}访问我们的系统</h1>

主页面:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
</head>
<body>
    <#include "/inc/top.ftl"/>
    <hr/>
    <#list users as user>
        ${user.id}---------${user.name}-------${user.age}<br/>
    </#list>
</body>
</html>

测试方法和输出:

@Test
public void test05() {
    root.put("username", "管理员");
    List<User> users = Arrays.asList(
               new User(1,"张三",22),new User(2,"李四",33));
    root.put("users",users);
    fu.print("05.ftl",root);
}
///////////////////////
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
</head>
<body>
    <h1>欢迎管理员访问我们的系统</h1><hr/>
    1---------张三-------22<br/>
    2---------李四-------33<br/>
</body>
</html>


处理空值

在这里新添加一个对象Group,在User引用这个对象,没给group对象赋值的情况下测试处理空值的情况。

Group.java

package com.naxsu.freemarker;
public class Group {
    private String name;
    // set get method
    public Group(String name) {
        super();
        this.name = name;
    }
    public Group() {
    }
}

User.java中引用Group对象

public class User {
    private Group group;
    //set get method
}

测试方法

@Test
public void test06() {
    //此时user对象并没有group的值
    root.put("user",new User(1,"地点",22));
    fu.print("06.ftl",root);
}

用!符号可以处理空值,在!号后面加字符串是在此对象不存在的情况下,显示该字符串。

如果对象是空值,并没有在后面加!号,会直接报错。

${user.id}-------${user.name}------${user.group!}

${user.id}-------${user.name}------${user.group!"此时user对象并没有group的值"}

1-------地点------

1-------地点------此时user对象并没有group的值

下面也会出错,因为此方式加!freemarker仅仅只会判断group.name是不是空值

${user.group.name!}

此问题的解决方案是把整个导航用小括号包起来,然后再加!

${(user.group.name)!"没有任何值存在"}

普通的字符串也可以用!来获取空值:

${(a.b)!"没有a.b元素"}

没有a.b元素

在if标签中可以用两个问号来判断是否为空

<#if (a.b)??>

   不为空

<#else>

   为空

</#if>

为空

定义变量

<#--定义变量-->

<#assign username="张三"/>

${username}

@Test

public void test07() {

   root.put("now",new Date());

   root.put("username", "李四");

   fu.print("07.ftl",root); }

张三


本文链接:FreeMarker基本标签的使用,本文由huangyineng原创,转载请注明出处

相关问答

更多

使用Spring MVC都用什么标签库或逡

1.struts,jstl,spring标签库的性能感觉还是稍弱于模板引擎技术freemarker和velocity的,语法上内置的函数库不足以应付开发者的很多需求,所以公司有很多重复的自定义的组件,而且不规范的公司2个开发者同样的标签库也会出现重写的情况,比如时间格式化的标签,得自定义标签库才可以我记得是。 2.freemarker和velocity我感觉还是偏向于freemarker,相比性能差不多,但freemarker的语法比velocity更复杂,使用更得心应手,尤其macro更是用着舒 ...

万能标签使用方法

同题,班门弄斧,高手可无视。一点我的个人经验。 中文标签我不会弄,尽管大家说那个简单,但是我看了半天还是看不出了所以然,我的理解是,一种布局就得建一个模板,那么如果仿制新浪首页,布局那么多,样式繁琐,不会会要在后台新建很多模板?我不了解,牢骚话,切莫在意。 说一下万能标签,很多网站主并不仅仅拥有一个网站,什么个人空间,博客,论坛,主站等等一大堆,怎么把这些整合起来是目前大多站长的难题,而开发把这些整合在一起的功能更是目前很多CMS开发公司争抢着做做的事情,更是一种拉拢用户占领市场的手段。 DEDE ...

springmvc表单标签怎么使用

在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容。

springmvc为什么使用表单标签报错

springmvc使用表单标签报异常:java.lang.IllegalStateException: No

CentOS yum使用基本进行整理

CentOS系统全部都是操作命令.太麻烦了....呵呵,简单介绍下.! 希望对您有用CentOS yum使用 CentOS应该是做为服务器的linux的佼佼者。 (本人比较喜欢使用 CentOS5.3) CentOS采用的二进制包是rpm,不过包的依赖性解决有时候却是个问题。我比较喜欢debian的apt,非常方便。以前以为RedHat linux没这么方便,后来发现CentOS yum是个不错的东西。CentOS yum使用和apt有几分相似,这样一来对于许多包的安装就方便多了。这篇文章主要讲两 ...

专题教程

JAVA概述
第一部分:java入门基础
第二部分:java常用类
第三部分:jdbc系列教程
第四部分:java高级特征
Gson教程
快速了解 jdk8 新特征

相关文章

更多

最近更新

更多