gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:45:13 25 4
gpt4 key购买 nike

我只是遗漏了一些明显的东西,还是没有合理或半途而废的方法来为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com