如何将空值或“空”值分配给Freemarker时间变量?

时间:2016-04-13 10:32:13

标签: liferay freemarker

我正在使用Freemarker构建Liferay应用程序显示模板。模板使用循环来迭代一组实体(期刊文章)。模板使用类型日期和时间的几个变量。如何重置这些变量或在循环的每次迭代中检查“空”?

假设我们在循环中有这个代码,并且在循环的某些Interations中,“starthour”可能是空的:

<#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='start_hour']") />
<#assign starthour = xPathSelector.selectSingleNode(rootElement).getStringValue()?trim />
<#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='start_minutes']") />
<#assign startminutes = xPathSelector.selectSingleNode(rootElement).getStringValue()?trim />
<#if starthour!="">
  <#assign startTimeString=  starthour +":"+startminutes>
  <#assign starttime = startTimeString?time["HH:mm"]>
<#else>
 <#assign starttime = 0>
</#if>

在这个例子中我将starttime设置为0,但是当starthour为空时我也尝试将它设置为空字符串。

我已经尝试过这些方法来检查“空”变量:

<#if (starttime >0) >
<#if starttime.has_content>
<#if starttime!="">

我无法检查

<#if starttime??>

在我的循环中设置变量之后

。无论我尝试什么,当我在Liferay中使用我的脚本时,我总会得到像这样的错误:

The only legal comparisons are between two numbers, two strings, or two dates.
Left  hand operand is a freemarker.template.SimpleDate
Right hand operand is a freemarker.template.SimpleNumber

那么如何“重置”时间变量或为其设置“空”值,以及如何检查空(但不是空)时间值?

1 个答案:

答案 0 :(得分:0)

你不能取消设置值(如果可以的话,读取它会回到更高的范围,如果这样的变量出现在数据模型中,这可能会导致错误)。所以你要么必须引入一个布尔startTimeSet变量,要么你必须选择一个特殊的空值。因为没有&#34;自然&#34;时间值的空值,您可以使用"",然后在对其执行任何操作之前,请使用?has_content检查值。