下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

web前端:默认值操作符(Freemarker的空值处理)

作者:幂次方     来源: https://www.cnblogs.com/lzghyh/p/11908280.html点击数:1137发布时间: 2020-03-10 15:06:15

标签: javaFreemarkerXML

Web开发

  FreeMarker是一个用java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XMLjsp或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生成页面,通过模板显示准备的数据。

赞(12)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程