PDF生成(二)freemarker 的空值处理

在生成PDF时,难免要处理一些空值问题,可以在java代码中处理,也可以在HTML模板中,用freemarker的语法来处理。

这里简单说一个freemarker对空值的处理。中文版freemarker在线手册里介绍的很清楚,可以参考:

http://freemarker.foofun.cn/dgui_quickstart_template.html#autoid_8

java代码里的参数:

paraMap.put("paymentWay", "");

HTML模板里的值:

  <#if paymentWay ??>
      ${paymentWay}
    <#else>paymentWay的值不存在
  </#if>

当java代码中有参数paymentWay这个参数时,就显示参数的值,是空,也显示空,当没有传paymentWay 这个参数时,就打印出else语句,如本例paymentWay的值不存在。
当有多级判断时,可以加括号,这里借用上篇文章的框架,简单改一下参数和模板,这里JSON组装参数,java对象与之类似。
java代码如下:

Map<String, Object> paraMap = new HashMap<String, Object>();
        JSONObject para = new JSONObject();
        para.put("name", "王小二");
        para.put("address", "人民路");
        para.put("age", 18);
        JSONObject test = new JSONObject();
        test.put("para", para);
        paraMap.put("test", test);

HTML模板部分代码如下 :

<body style='text-justify-trim:punctuation'>
这是一个测试用例:
姓名:
    <#if (test.para.name)??>
        ${test.para.name}
         <#else>name的值不存在   
    </#if>
地址:
    <#if (para.address)??>
        ${para.address}
    </#if>
年龄:
    <#if (para.age)??>
        ${para.age}
     <#else>age 的值不存在   
    </#if>
爱好:
    <#if (para.hobby)??>
        ${para.hobby}
     <#else>hobby的值不存在  
    </#if>
</body>

PDF生成如下的值:

这是一个测试用例: 姓名: 王小二 地址: 年龄: age 的值不存在 爱好: hobby的值不存在 

说明:(test.para.name)?? 会进行多级判断,当且仅当test,test.para,test.para.name三者同时存在时,会打印 if 的值。某一个不存在时,并不会报错,会打印else 的值。 如果没有括号时,当test或者test.para有一个不存在,就会报错。所以建议加个括号,会省去很多事儿,可以多级判断。

猜你喜欢

转载自blog.csdn.net/every__day/article/details/80237933
今日推荐