如何将空值或"Empty"值分配给自由标记时间变量?



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

假设我们在循环中有这个代码,在循环的某些交互中,"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为空时,我也尝试将其设置为空String。

我已经尝试了这些方法来检查"空"变量:

<#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

那么,我如何"重置"一个时间变量或为其设置一个"空"值,以及如何检查一个空(但不是空)的时间值?

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

最新更新