我目前正在处理组件,我需要一个if else语句来过滤掉页面对象是否为null,这是我的尝试:
[#assign page = cmsfn.page(component)]
[#if page IS NULL ] // not working...
[@cms.component content=cmsfn.asContentMap(component) editable=false/]
[/#if]
和这一个
[#assign page = cmsfn.page(component)]
[#if !page?has_content ] // not working...
[@cms.component content=cmsfn.asContentMap(component) editable=false/]
[/#if]
我在这里要做的是,如果页面对象是null,那么做组件rending,这些页面对象是jrc子节点,当渲染组件这种类型的节点搞乱东西模板时,所以我需要过滤out并确保页面为null,然后渲染。
有什么建议吗?请给我一个代码示例。 感谢
答案 0 :(得分:2)
FreeMarker(2.x)的模板语言有这个......怪癖,它没有null
值。因此,您无法将null
存储在变量中。如果foo.bar
bar
对应于返回getBar()
的Java null
,那么就模板语言而言,foo
根本不包含bar
。并且,引用不存在的内容是非法的,除非您在引用表达式上直接应用null
/缺少处理程序运算符 (如foo.bar!'myDefault'
或{{1 }})。
因此,最简单的方法是避免像foo.bar??
这样的分配。但有时这是不可接受的,因此你必须再次让[#if cmsfn.page(component)??]...[/#if]
进一步下降。然后,您可以使用一些默认值,您可以区分非默认值。假设对于page
对象page
给出?has_content
(除非你使用了一些奇怪的true
),一个默认值如ObjectWrapper
(空哈希) )足够了。 {}
运算符可以用作速记,因为它还提供了exp!
为false的默认值:
?has_content