Freemaker教程4(处理空值)

2024-06-09 15:32
文章标签 教程 处理 空值 freemaker

本文主要是介绍Freemaker教程4(处理空值),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文转载自:http://sishuok.com/forum/posts/list/5157.html


Freemaker中,如果在ftl文件中直接写一个${没有的元素},然后程序执行会报freemarker.core.InvalidReferenceException


  1. 当你不确定一个值一定存在时,可以在这个值的后面加上!  形如${user.xxx!}

当你想要如果一个值不存在时,希望可以看到一些提示信息,可以这么写:

${user.xxx!”user.xxx不存在”},这样当值不存在时,会显示双引号中的字符串。

    注:如果你写${user.xxx.yyy!},如果${user.xxx}值不存在一样会报错,想要这种写法不报错,可以这么写:${(user.xxx.yyy)!”提示信息”}

 

  1. 你也可以使用if标签判断:

<#if (user.xxx)?? > //??表示存在

       ${user.xxx}存在

    <#else>

       user.xxx不存在

</#if>

 

  1. 实际的代码:
  1. 新建一个ftl文件(06.ftl):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

    ${user.username} --- ${user.nickname} --- ${user.xxx!"user.xxx不存在"}

    <br/>

    ${(user.group.name)!"user.group.name不存在  需要加(user.group.name)"}

    <br/>

    <#if (user.xxx)?? > //??表示存在

       ${user.xxx}存在

    <#else>

       user.xxx不存在

    </#if>

   

</body>

</html>

  1. 代码:

    @Test

    public void  testDealNullValue()

    {

       Map<String , Object> root = new HashMap<String, Object>();

       User u1 = new User(1 , "张鸿洋" ,21 , "绿茶");

       root.put("user", u1);

       root.put("username", "管理员");

       //后面会介绍使用到的方法

       utils.print2File("06.ftl", root, "d:/freemaker/test6.html");

       utils.print2Console("06.ftl", root);

}

 

  1. 运行结果:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

    张鸿洋 --- 绿茶 --- user.xxx不存在

    <br/>

    user.group.name不存在  需要加(user.group.name)

    <br/>

   

    user.xxx不存在

   

</body>

</html>

 

 

 

 

 

上面使用到的方法:

    /**

     * 根据模版获得一个指定的模版

     * @param name

     * @return

     */

    public Template getTemplate(String name )

    {

       try {

           //获得配置对象

           Configuration configuration = new Configuration() ;

           //设置模版的文件夹路径,本人在src下新建了一个ftl文件夹

           configuration.setClassForTemplateLoading(this.getClass(), "/ftl");

           //更具名字获得指定的一个模版

           Template template = configuration.getTemplate(name);

          

           return  template;

       } catch (IOException e) {

           e.printStackTrace();

        }

       return null ;

    }

   

    /**

     * 根据指定的名字获得指定的模版,传入键值对

     * @param name

     * @param root

     */

    public void print2Console(String name , Map<String,Object> root)

    {

       try {

          

           Template template = getTemplate(name);

           template.process(root, new PrintWriter(System.out));

       } catch (TemplateException e) {

           e.printStackTrace();

       } catch (IOException e) {

           e.printStackTrace();

       }

    }

   

    public void print2File(String name , Map<String,Object> root , String fileName)

    {

       try {

           Template template = getTemplate(name);

           template.process(root, new PrintWriter(new File(fileName)));

       } catch (TemplateException e) {

           e.printStackTrace();

       } catch (IOException e) {

           e.printStackTrace();

这篇关于Freemaker教程4(处理空值)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1045575

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

沁恒CH32在MounRiver Studio上环境配置以及使用详细教程

目录 1.  RISC-V简介 2.  CPU架构现状 3.  MounRiver Studio软件下载 4.  MounRiver Studio软件安装 5.  MounRiver Studio软件介绍 6.  创建工程 7.  编译代码 1.  RISC-V简介         RISC就是精简指令集计算机(Reduced Instruction SetCom

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

前端技术(七)——less 教程

一、less简介 1. less是什么? less是一种动态样式语言,属于css预处理器的范畴,它扩展了CSS语言,增加了变量、Mixin、函数等特性,使CSS 更易维护和扩展LESS 既可以在 客户端 上运行 ,也可以借助Node.js在服务端运行。 less的中文官网:https://lesscss.cn/ 2. less编译工具 koala 官网 http://koala-app.

【Shiro】Shiro 的学习教程(三)之 SpringBoot 集成 Shiro

目录 1、环境准备2、引入 Shiro3、实现认证、退出3.1、使用死数据实现3.2、引入数据库,添加注册功能后端代码前端代码 3.3、MD5、Salt 的认证流程 4.、实现授权4.1、基于角色授权4.2、基于资源授权 5、引入缓存5.1、EhCache 实现缓存5.2、集成 Redis 实现 Shiro 缓存 1、环境准备 新建一个 SpringBoot 工程,引入依赖:

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚