2

我有一个带有$facet.name保存日期的变量的 Velocity 模板。现在我想在这个日期上加一个月。我这样做如下:

#set( $cal = $Calendar.getInstance.setTime($facet.name) )
$cal
$cal.add($Calendar.MONTH,1)
$cal.getTime.toString

最后 3 行按原样评估:我得到了

$cal
$cal.add($Calendar.MONTH,1)
$cal.getTime.toString

作为输出。我应该怎么做正确的方式?

4

4 回答 4

1

Java Calendar.setTime(long)返回void

这条线

#set( $cal = $Calendar.getInstance.setTime($facet.name) )

会尝试将 setTime() 方法返回的“空值”分配给 $cal ...(尽管我肯定认为,应该在某处出现关于此的错误消息)

尝试:

#set( $cal = $Calendar.getInstance() )
$cal.setTime($facet.name)

编辑

我认为 $Calendar.getInstance 没有括号是无效的。(速度文档这样说A VTL Method Body consists of a VTL Identifier followed by an left parenthesis character ("("), followed by an optional parameter list, followed by right parenthesis character (")").:)

另外,请注意:即使$Calendar您将 . 添加Calendar.class到上下文中也可以使用"Calendar"。您只有放入其中的内容(或工具放入其中供您使用的内容...)

编辑2

麻烦的是,SOLR 放入 Velocity 上下文的内容非常有限:

速度上下文

  • esc : Velocity EscapeTool实例
  • 日期:速度比较日期工具实例
  • list : Velocity ListTool实例
  • math : Velocity MathTool实例
  • number : Velocity NumberTool实例
  • page:一个PageTool实例。当响应是 QueryResponse 时,仅页面被添加到上下文中。
  • 请求:一个SolrQueryRequest
  • response:大多数情况下是QueryResponse,但在某些情况下 QueryResponse 不喜欢请求处理程序的输出(例如,AnalysisRequestHandler 导致 ClassCastException 解析“响应”),响应将是 SolrResponseBase 对象。
  • sort : Velocity SortTool实例

来自 SOLR 文档

对于您尝试做的事情,ComparisonDateTool似乎是合适的......

于 2013-09-19T13:50:17.317 回答
1

从评论看来,您认为您可以在速度中使用 java 代码。那不是真的。这在 jsp 和例如 php 中是可能的,但在速度模板中是不可能的(你知道,这个“不要在你的视图中使用业务逻辑”的东西)。

如果您需要调用一些逻辑,那么

  • 您必须将一个实例添加到您的速度上下文中,其中包含您可以调用方法的内容或
  • 您必须使用工具,例如速度通用工具中的日期工具。信息可以在这里找到:http: //velocity.apache.org/tools/releases/2.0/generic.html
于 2013-09-19T14:15:49.647 回答
1

如果您有 DateTool 可用,您可以使用它将毫秒直接添加到您的日期对象,而不必一起处理日历对象:

#set ($datePlusOne = $date.toDate($math.add($facet.name.time, 86400000)))
于 2015-07-22T17:34:58.720 回答
1

我想将 5 天添加到变量中保存的日期。我尝试了几件事,以下代码对我来说很好

#set($calendar = $date.getCalendar())   
$calendar.setTime($myDate)  
$calendar.add(6,5)  

$date.format('MM/dd/yyyy',$calendar.getTime()) 

我希望这将帮助您在给定日期添加/减去任意天数。

于 2015-09-21T17:04:27.500 回答