【问题标题】:How to read the datetime property in sightly html (AEM 6.1)如何在 html 中读取 datetime 属性(AEM 6.1)
【发布时间】:2016-04-12 17:09:56
【问题描述】:

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

我想在这里了解两件事-

  1. 我怎样才能从该属性中读取日期和时间。
  2. 当我将此日期作为参数传递给我的 Use 类(Java 类)时,它会以 null 的形式传递。但是,当我通过 currentPage.lastModified 时,我可以看到日期值。

任何指针将不胜感激。

【问题讨论】:

  • 你能澄清一下你想用代码示例做什么吗?您可以像任何其他属性一样阅读 Sightly HTML 中的属性,但没有格式,Java Use 类中的格式已由下面的@Subhash 回答。至于你的另一个问题,你能显示你用来读取日期的代码行吗?

标签: aem sightly


【解决方案1】:

不确定使用sightly 的方法。

提供替代解决方案 - 您可能会在包含 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())))

【讨论】:

    【解决方案2】:

    我想缺少的部分是,你没有在你的视线中添加use class。你的视力应该有这个:

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

    相应的 java 使用类应该有这样的重写 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 支持的日期模式有很多,您可以选择所需的一种。

    【讨论】:

      【解决方案3】:

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

      dateformater.js 文件:

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

      和 HTL (Sightly) 标记示例:

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

      【讨论】:

        【解决方案4】:

        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'}
        

        时区参数是可选的,所以如果你想要默认时区的时间,那么你可以省略时区参数。

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

        您可以在此处阅读更多相关信息 - https://github.com/adobe/htl-spec/blob/1.3/SPECIFICATION.md#1222-dates

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-09-25
          • 1970-01-01
          • 1970-01-01
          • 2016-02-14
          • 2017-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多