如何在stml html中读取datetime属性(AEM 6.1)

时间:2016-04-12 17:09:56

标签: aem sightly

我的cq对话框中有一个属性,其xtype是datetime。值在cq中存储为“2016-04-11T03:00:00.000-04:00”,属性名称为eventDate。

我想知道两件事 -

  1. 我如何通过stml html从这个属性中读取日期和时间。
  2. 当我将此日期作为我的Use类(Java类)中的参数传递时,它将作为null传递。但是,当我传递currentPage.lastModified时,我可以看到日期值。
  3. 任何指针都将受到高度赞赏。

4 个答案:

答案 0 :(得分:0)

不确定使用方法是否正确。

提供替代解决方案 - 您可能在包含datetime属性的节点上使用了jcr api。 java.text.SimpleDateFormat api可用于有效地提取日期和时间。 例如:

SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
dateFormat.format(node.getProperty(eventDate).getValue().getDate().getTime())

与日期时间中的持久日期类似,您可以使用com.day.cq.commons.date.DateUtil api

node.setProperty(propertyName, DateUtil.parseISO8601(DateUtil.getISO8601Date(Calendar.getInstance())))

答案 1 :(得分:0)

I guess the missing part is, you are not adding the use class。你应该这样做:

<div data-sly-use.eventUseObj = "com.test.models.EventModel" data-sly-unwrap />

相应的java use类应该覆盖这样的activate()方法:

public class EventModel extends WCMUse {
    private String eventDate;

    @Override
    public void activate() {
        Calendar eventCalendar = getProperties().get("eventDate", Calendar.class);
        DateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd");
        eventDate = outputFormat.format(eventCalendar.getTime());
    }
}

现在,这个日期可以像这样轻松地使用:

$ {eventUseObj.eventDate}

这将打印页面上的日期值。 SimpleDateFormat支持安培数量的日期模式,您可以选择所需的日期模式。

答案 2 :(得分:0)

这是一个使用javascript UseAPI的简单示例,逻辑应该适用于Java UseAPI

dateformater.js文件:

&#13;
&#13;
"use strict";
//dateformatter.js 
use(function () {
	var formattedDate = new java.text.SimpleDateFormat(this.mask).format(this.date);
	return {
    	formattedDate: formattedDate
    };
});
&#13;
&#13;
&#13;

和HTL(Sightly)标记示例:

&#13;
&#13;
<h1 data-sly-use.formatter="${'dateformatter.js' @ date=properties.eventDate.time, mask='dd/MM/yyyy hh:mm:ss'}">
    Event date formatted: ${formatter.formattedDate}
</h1>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

Sightly具有支持格式化字符串,日期和数字的内置函数。这是您将日期格式化为特定格式的方法。

${'yyyy-MM-dd HH:mm:ss.SSSXXX' @ format=obj.date, timezone='UTC'}
${'yyyy-MM-dd HH:mm:ss.SSSXXX' @ format=obj.date, timezone='GMT+02:00'}

timezone参数是可选的,因此,如果要将时间设为默认时区,则可以省略timezone参数。

${'yyyy-MM-dd HH:mm:ss.SSSXXX' @ format=obj.date}

您可以在此处详细了解-https://github.com/adobe/htl-spec/blob/1.3/SPECIFICATION.md#1222-dates