java - Liferay:消息的到期日期(留言板)

标签 java liferay

我只是遗漏了一些明显的东西,还是没有合理或半途而废的方法来为 Liferay 的留言板中的消息添加到期日期?

第一个问题是如何在消息编辑器中输入到期日期。最明显的解决方案可能是 expando 属性,但似乎没有日期的 expando 数据类型(只有日期和时间),我发现无法在 expando 属性中设置计算的默认值(例如今天 + 6 个月)。即使没有默认值,日期+时间属性默认为 1970 年 1 月 1 日,格林威治标准时间 0:00,使用日期选择器输入实际到期日期也相当乏味。输入到期日期后,没有明显的方法来验证它(例如将其限制为今天和今天 + 6 个月之间的日期)并且当日期显示在消息 View 中时,当前区域设置不用于格式化日期和时间。

即使我设法将过期日期压缩到 expando 属性中,也没有明显的方法来评估过期日期。

如果消息仍然存在,但不会在 MB portlet 中计算和显示,那是可以接受的。 MBThreadServiceUtil 中用于访问消息的方法不提供任何额外的过滤条件,因此我要么必须加载所有消息并在 Java 代码中执行计数/过滤操作(几乎不是一个非常聪明的解决方案),要么我将不得不重写整个服务堆栈“自下而上”并添加获取或搜索方法,这些方法能够将过滤转发到数据库。

首选的解决方案是有一个计划任务,它会定期完全删除过期的消息。由于 MB portlet 支持作用域(消息与 portlet 的作用域相关)并且预定任务不在 portlet 上下文中运行,因此我必须以某种方式访问​​作用域 ID。如果我了解有关此主题的文档和可用讨论,则默认范围应该是该页面所属的社区。另一方面,我们的“留言板页面”是在组织级别添加的,消息的范围 ID 既不匹配组织 ID,也不匹配组织中任何社区的 ID。有人知道如何在这种情况下确定范围 ID 吗?

最佳答案

我会用计划任务制作 - liferay 在这里用于 Quartz; http://liferaysnippets.com/how-to-create-cron-job-in-liferay/

您可以使用 DynamicQueries 保留的过期消息:

    Calendar c = Calendar.getInstance();
    c.add(Calendar.MONTH, -6);
    Date halfYearAgo = c.getTime();
    ClassLoader portalClassLoader = PortalClassLoaderUtil.getClassLoader();
    DynamicQuery query = DynamicQueryFactoryUtil.forClass(MBThread.class, portalClassLoader)
            .add(PropertyFactoryUtil.forName("lastPostDate").le(halfYearAgo)).addOrder(OrderFactoryUtil.asc("lastPostDate"));

    try {
        List dynamicQuery = MBThreadLocalServiceUtil.dynamicQuery(query);
        for (Object object : dynamicQuery) {
            MBThread thread = (MBThread) object;
            MBThreadLocalServiceUtil.deleteMBThread(thread);
        }
    } catch (SystemException e) {
        e.printStackTrace();
    }

关于java - Liferay:消息的到期日期(留言板),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10436653/

相关文章:

java - 将 `strictfp` 转换为 `float` 时是否应该使用 `double` 修饰符?

java - 与 PHP 相同的 Java 多数组/对象

Java Swing : main class wait until JFrame is closed

javascript - javascript函数的Alloy UI问题

java - 在 Liferay 6.2 中无法将对象从类传递到 jsp

java - 在项目中添加Java代码模板XML文件

java - Spring 有没有获取数据库指标的方法?

liferay - 如何更改 Assets 发布者默认未找到消息?

liferay - 服务生成器不会删除数据库中的表

windows - Liferay Community Edition 集中/共享存储问题