freemarker之空值处理解决方案

freemarker之空值处理解决方案

1.使用判断标签

    ${user.name?if_exists}    //判断存在则输出,反之不输出
    ${user.name!default("默认值")} or ${name!"默认值"}   // 判断存在则输出,反之输出默认值
    ${datename?string('yyyy-MM-dd')}    //日期格式

也可以用if…else标签,来判断输出
如果需要其他更确切的变量,可以去查看freemarker的标签大全。

2.使用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>

3.属性配置方法:

配置classic_compatible属性为true,可以满足一般需要。默认情况变量为null则替换为空字符串。但注意这个日期的空值还是需要使用方法1。

  • 1、通过Configuration设置。这个设置可以在构造器或者ini方法使用。
private Configuration configuration = null; //解释Configuration

//构造函数
public FreeMarkerHandler(){
      configuration = new Configuration();
      //输出的数据默认的编码类型
           configuration.setDefaultEncoding("utf-8");
      //方法一:处理空值
      configuration.setClassicCompatible(true);
}
  • 2、通过Eviroment设置。
//合并数据模型和模版,并将结果输出到out中
Environment env = template.createProcessingEnvironment(dataMap, out);
env.setClassicCompatible(true);
env.process();
  • 3、通过ftl设置:在ftl的第一行前添加
<#setting classic_compatible=true>
  • 4、Spring项目,通过配置文件设置
    因为我的就是Spring项目,所以用的就是这种方法,把所有配置都贴出来,大家可以参考一下。
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
     <!-- 指定FreeMarker模板文件目录 -->
     <property name="templateLoaderPath" value="/WEB-INF/views/" />
     <property name="freemarkerSettings">
           <props>
                <prop key="template_update_delay">0</prop>
                <prop key="defaultEncoding">UTF-8</prop>
                <prop key="url_escaping_charset">UTF-8</prop>
                <prop key="locale">zh_CN</prop>
                <prop key="boolean_format">true,false</prop>
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
                <prop key="date_format">yyyy-MM-dd</prop>
                <prop key="time_format">HH:mm:ss</prop>
                <prop key="number_format">0.######</prop>
                <prop key="whitespace_stripping">true</prop>
                <!--空值处理-->
                <prop key="classic_compatible">true</prop>
                <prop key="auto_import">/commons/header.ftl as p,/commons/storejoininheader.ftl as sp,/commons/store_joinin_left.ftl as sl
                </prop>
           </props>
     </property>
</bean>
  • 5、使用freemarker.properties文件配置
    添加属性classic_compatible=true
//加载并设置freemarker.properties  
Properties p = new Properties(); 
        p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("freemarker.properties"));  
configuration.setSettings(p);
e1.printStackTrace();

我写了一个简单的demo,放在码云。有兴趣的童鞋可以下来看看,测试一下
freemarker的测试项目

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值