在生成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有一个不存在,就会报错。所以建议加个括号,会省去很多事儿,可以多级判断。