基于OpenLayers的WebGIS程序二次开发实例教程
34490 人在学
FreeMarker是一个用java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,jsp或Java等。
默认值操作符:
使用形式例如:
userName!default_expr
或userName!
或(userName)!default_expr
或(userName)!
这个操作符允许你为可能不存在的变量指定一个默认值(default_expr),'!'后没有参数默认返回一个空。
例如,假设下面展示的代码中没有名为mouse的变量:
${mouse!"Nomouse."}
<#assignmouse="Jerry">
${mouse!"Nomouse."}
将会输出:
Nomouse.
Jerry
如果默认值被省略了,那么结果将会是空串,空序列或空哈希表。(这是FreeMarker允许多类型值的体现)请注意,如果想让默认值为0或false,则不能省略它。例如:
${mouse!})
<#assignmouse="Jerry">
(${mouse!})
将会输出:
()
(Jerry)
默认值可以是任何类型的表达式,也可以不必是字符串。也可以这么写:hits!0或colors!["red","green","blue"]。默认值表达式的复杂程度没有
严格限制,还可以这么来写:cargo.weight!(item.weight*itemCount+10)。
用于非顶层变量时,默认值操作符可以有两种使用方式:
1. product.color!"red"
2.(product.color)!"red"
两种使用方式区别:
第一种方式,当product为null,这会解析出错(java中的空指针),只有当product有值,color为null时能显示默认值"red"而不会报错,
第二种方式:当product为null或者product存在而color为null,都能显示默认值"red"而不会报错
本例和上例写法的重要区别在于用括号时,就允许其中表达式的任意部分可以未定义。而没有括号时,仅允许表达式的最后部分可以不被定义。
警告!
如果在!后面有复合表达式,如1+x,通常使用括号,如${x!(1+y)}或${(x!1)+y)},这样就根据你的意图来确定优先级。由于FreeMarker2.3.x版本的源码中的小失误所以必须这么来做。!(作为默认值操作)右侧的优先级非常低。这就意味着${x!1+y}会被FreeMarker误解为${x!(1+y)},而真实的意义是${(x!1)+y}。这个源码错误在FreeMarker2.4中会得到修正。在编程中注意这个错误,要么就使用FreeMarker2.4!
因为语法的含糊<@somethinga=x!b=y/>将会解释为<@somethinga=x!(b=y)/>,那就是说b=y将会被视为是比较运算,然后结果作为x的默认值,而不是想要的参数b。为了避免这种情况,如下编写代码即可:<@somethinga=(x!)b=y/>
FreeMarker允许Javaservlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封html完成的。模板用servlet提供的数据动态地生成HTML。模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度。虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据。