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

FreeMarker中,有几种处理空值的方法。首先,可以使用判断标签来判断变量是否存在,并根据情况输出或不输出相应的内容。例如,可以使用`${user.name?if_exists}`来判断`user.name`是否存在,如果存在则输出,反之则不输出。另外,可以使用`${user.name!default("默认值")}`或`${name!"默认值"}`来判断存在与否,并根据情况输出相应的值或默认值。此外,还可以使用`${datename?string('yyyy-MM-dd')}`来格式化日期。\[1\] 另一种处理空值的方法是使用`escape`和`noescape`标签。通过这两个标签,可以对所有的变量进行空值处理。可以设置默认值,将空值替换为默认值,或者不进行处理。例如,使用`<#escape x as x!"默认值"><span>账号</span>${user.id}<span>姓名</span>${user.name}</#escape>`来设置默认值,或者使用`<#noescape><span>账号</span>${user.id}<span>姓名</span>${user.name}</#noescape>`来对空值不进行处理。\[2\] 此外,还可以通过属性配置的方法来处理空值。可以在类路径下添加`freemarker.properties`文件,并在其中配置`classic_compatible=true`。或者通过`freemarker.template.Configuration`的`config.setClassicCompatible(true)`方法来设置。另外,在ftl文件内引入`<!--#setting classic_compatible=true-->`也可以实现相同的效果。\[3\] 综上所述,FreeMarker处理空值的方法有多种,可以根据具体情况选择适合的方法来处理空值。 #### 引用[.reference_title] - *1* *2* [freemarker空值处理解决方案](https://blog.csdn.net/wdehxiang/article/details/77772356)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [四种处理freemarker空值的方法](https://blog.csdn.net/weixin_33790053/article/details/92931783)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值