freemarker 处理null值

来源:互联网 发布:文华财经官网mac版 编辑:程序博客网 时间:2024/05/19 12:26

 

在开发过程中,有可能变量的值是为null的,freemarker不像EL表达式,EL表达式当某个变量不存在的时候不会出现报错,而freemarker是不能容忍null值的,除非预先判断,或者指定为null的时候的默认值.


处理方法一.

   在变量后指定默认值,当变量为null的时候就直接赋值默认值.

  语法:${变量名!默认值}

 项目结构:



null.ftl

<#--处理方法一           指定默认值 当变量user不存在的时候user的值就直接赋值字符串"admin" 如果在模版中存在user变量的值,则按照模版中的数据输出,为了 演示,user是在数据模型中存在的,而user1是在数据模型中不存 在的 --> ${user!"admin"} ${user1!"zhangsan"}   <#--注意如果u1变量是在hash表中不存在的           那么此处会报错,这个需要特别注意--> ${u1.username!"zhaoliu"}



User.java

package org.freemarker.test;/** * 用户实体类 * @author YHC * */public class User {private String username;//用户名称public User() {}public User(String username) {this.username = username;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}}


Test.java

package org.freemarker.test;import java.io.File;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import freemarker.template.Configuration;import freemarker.template.DefaultObjectWrapper;import freemarker.template.Template;import freemarker.template.TemplateException;public class Test {public static void main(String[] args) throws IOException,TemplateException {Configuration cfg = new Configuration();// 指定模板文件从何处加载的数据源,这里设置成一个文件目录。cfg.setDirectoryForTemplateLoading(new File("./template"));// 指定模板如何检索数据模型,这是一个高级的主题了…// 但先可以这么来用:cfg.setObjectWrapper(new DefaultObjectWrapper());// 创建根哈希表Map<String,Object> root = new HashMap<String,Object>();    //此变量是在模型中存在的root.put("user", "lisi");//放置对象到hash表中,注意此对象的username属性是为null的root.put("u1", new User());// 从配置Configuration对象中获取模版Template temp = cfg.getTemplate("null.ftl");Writer out = new OutputStreamWriter(System.out);temp.process(root, out);out.flush();out.close();}}



最终输出结果:

 lisi zhangsan   zhaoliu




处理方法二.

 使用if标签判断变量是否存在.

语法:<#if  变量名??></#if> 

在变量名后面通过放置??来判断变量是否存在,如果指定变量不存在的话,那么会忽略if开闭标签中的内容.


项目结构和上图一致.

Test.java

package org.freemarker.test;import java.io.File;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import freemarker.template.Configuration;import freemarker.template.DefaultObjectWrapper;import freemarker.template.Template;import freemarker.template.TemplateException;public class Test {public static void main(String[] args) throws IOException,TemplateException {Configuration cfg = new Configuration();// 指定模板文件从何处加载的数据源,这里设置成一个文件目录。cfg.setDirectoryForTemplateLoading(new File("./template"));// 指定模板如何检索数据模型,这是一个高级的主题了…// 但先可以这么来用:cfg.setObjectWrapper(new DefaultObjectWrapper());// 创建根哈希表Map<String,Object> root = new HashMap<String,Object>();    //此变量是在模型中存在的root.put("user", "lisi");//放置对象到hash表中,注意此对象的username属性是为null的root.put("u1", new User());//注意此对象的username是有值的root.put("u2",new User("qianqi"));// 从配置Configuration对象中获取模版Template temp = cfg.getTemplate("null.ftl");Writer out = new OutputStreamWriter(System.out);temp.process(root, out);out.flush();out.close();}}

null.ftl

<#--处理方法二          判断指定变量是否存在.         如果user变量不存在会忽略if开闭标签中的内容 -->  <#if user??>    user对象存在,值为:${user} </#if>  <#if user1??>     user1对象不存在    <#else>     user1对象不存在 </#if>  <#--   判断多级变量.   u1对象的username属性为null的.   u2对象的username属性是有值的. --> <#if u1.username??>   u1对象username属性存在值为${u1.username}.   <#else>   u1对象username属性不存在. </#if>  <#if u2.username??>   u2对象username属性存在值为${u2.username}.   <#else>   u2对象username属性不存在. </#if>   

User.java

package org.freemarker.test;/** * 用户实体类 * @author YHC * */public class User {private String username;//用户名称public User() {}public User(String username) {this.username = username;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}}

最终输出结果:

     user对象存在,值为:lisi      user1对象不存在    u1对象username属性不存在.    u2对象username属性存在值为qianqi.  






原创粉丝点击