如何在 magnolia freemarker(.ftl) 中定义对象是否等于 null
How to define if object is equal to null in magnolia freemarker(.ftl)
我目前正在开发一个组件,我需要一个 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 ,然后进行组件渲染,这些页面对象是 jrc 子节点,渲染组件时这种类型的节点会弄乱模板,所以我需要过滤掉并确保页面为空,然后呈现。
有什么建议吗?请给我一个代码示例。
谢谢
FreeMarker (2.x) 的模板语言有这个……怪癖,它没有 null
值。因此,您不能将 null
存储在变量中。当你有 foo.bar
其中 bar
对应 Java getBar()
其中 return null
,那么就模板语言而言,foo
根本不包含 bar
。并且,引用不存在的内容是非法的,除非您在引用表达式(如 foo.bar!'myDefault'
或foo.bar??
).
所以最简单的方法就是避免像[#if cmsfn.page(component)??]...[/#if]
这样的赋值。但有时这是不可接受的,因为你必须再次向下获取 page
。然后,您可以使用一些可以与非默认值区分开来的默认值。假设对于 page
对象 ?has_content
给出 true
(除非你使用一些奇怪的 ObjectWrapper
它确实如此),默认值如 {}
(空哈希) 就足够了。 exp!
运算符可以用作 shorthand,因为它还给出了默认值 ?has_content
为 false:
[#assign page = cmsfn.page(component)!]
[#if page?has_content]
[@cms.component content=cmsfn.asContentMap(component) editable=false/]
... Do something with `page`, otherwise we need not use #assign.
[#else]
... Don't do anything with `page`, it's that strange default object.
[/#if]
我目前正在开发一个组件,我需要一个 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 ,然后进行组件渲染,这些页面对象是 jrc 子节点,渲染组件时这种类型的节点会弄乱模板,所以我需要过滤掉并确保页面为空,然后呈现。
有什么建议吗?请给我一个代码示例。 谢谢
FreeMarker (2.x) 的模板语言有这个……怪癖,它没有 null
值。因此,您不能将 null
存储在变量中。当你有 foo.bar
其中 bar
对应 Java getBar()
其中 return null
,那么就模板语言而言,foo
根本不包含 bar
。并且,引用不存在的内容是非法的,除非您在引用表达式(如 foo.bar!'myDefault'
或foo.bar??
).
所以最简单的方法就是避免像[#if cmsfn.page(component)??]...[/#if]
这样的赋值。但有时这是不可接受的,因为你必须再次向下获取 page
。然后,您可以使用一些可以与非默认值区分开来的默认值。假设对于 page
对象 ?has_content
给出 true
(除非你使用一些奇怪的 ObjectWrapper
它确实如此),默认值如 {}
(空哈希) 就足够了。 exp!
运算符可以用作 shorthand,因为它还给出了默认值 ?has_content
为 false:
[#assign page = cmsfn.page(component)!]
[#if page?has_content]
[@cms.component content=cmsfn.asContentMap(component) editable=false/]
... Do something with `page`, otherwise we need not use #assign.
[#else]
... Don't do anything with `page`, it's that strange default object.
[/#if]