当前位置: 首页 > 知识库问答 >
问题:

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

公羊俭
2023-03-14

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

假设我们在循环中有以下代码,在循环的某些交互中,“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>
<#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个答案

金骞尧
2023-03-14

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

 类似资料:
  • 如果未在 Go 中设置环境变量,如何分配默认值? 在Python中,我可以做其中是默认值,如果env var未设置。 我尝试了基于 os 的 if 语句 是空的,但由于 if 语句中的变量赋值范围,这似乎不起作用。而且我正在检查多个 env var,所以我无法在 if 语句中对这些信息采取行动。

  • URL: http://localhost:8080/api/user/2?name=neeru 输出: name=neeru id=null 我也试过 URL: http://localhost:8080/api/user/id=2?name=neeru但获取相同的id值=null 我又添加了一个方法-只有 但结果与路径变量值name=null相同

  • 因此,我目前正在尝试找出,如果提供的数据模型不包含标记,是否可以保留该值。我知道,但这不适用于FreeMarker标记。 基本上,我想做的是:

  • 问题内容: 如果在Go中未设置环境变量,如何分配默认值? 在Python中,如果未设置env var,我可以在哪里设置默认值。 我尝试了基于空的if语句,但是由于if语句中变量赋值的范围,这似乎不起作用。而且我正在检查多个env var,因此无法在if语句中对这些信息进行操作。 问题答案: 没有内置功能可以还原为默认值,因此您必须执行良好的老式if-else。 但是,您始终可以创建一个辅助函数来简

  • 我想检查DateTime字段是否不是空的\null字符串。如果datetime字段不为空,则我将执行一些操作。 这是我的错误消息: 我能做些什么来检查一个字段是否不是字符串,而是对象?

  • 问题内容: 我正在使用以下代码: 该值不警报。怎么了 问题答案: 实质上: