本文主要是介绍Freemaker教程4(处理空值),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文转载自:http://sishuok.com/forum/posts/list/5157.html
Freemaker中,如果在ftl文件中直接写一个${没有的元素},然后程序执行会报freemarker.core.InvalidReferenceException
- 当你不确定一个值一定存在时,可以在这个值的后面加上! 形如${user.xxx!}
当你想要如果一个值不存在时,希望可以看到一些提示信息,可以这么写:
${user.xxx!”user.xxx不存在”},这样当值不存在时,会显示双引号中的字符串。
注:如果你写${user.xxx.yyy!},如果${user.xxx}值不存在一样会报错,想要这种写法不报错,可以这么写:${(user.xxx.yyy)!”提示信息”}
- 你也可以使用if标签判断:
<#if (user.xxx)?? > //??表示存在
${user.xxx}存在
<#else>
user.xxx不存在
</#if>
- 实际的代码:
- 新建一个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>
- 代码:
@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);
}
- 运行结果:
<!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(处理空值)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!