You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Liferay 7中JSP渲染资产条目内容及JournalArticle查询报错问题

你完全没错——Liferay里的「基础Web内容」确实对应JournalArticle实体,这个假设是正确的。你遇到的报错问题,核心原因是对assetEntry.getClassPK()的用途理解偏差,以及JournalArticleLocalService方法参数的误用。

问题根源解析

当你创建Web内容时,对应的AssetEntry中,classPK存储的是Web内容的**articleId**(也就是你创建内容时自定义的文章ID,若为数字形式会被转成long类型存储),而不是JournalArticle表的自增主键id。JournalArticleLocalService.getArticle(long id)这个方法是根据自增主键id来查询的,所以你用assetEntry.getClassPK()(即articleId的数值)去查,自然找不到对应的记录,就会抛出No JournalArticle exists with the primary key XXX的错误。

正确获取Web内容的解决方案

1. 先验证AssetEntry类型

确保当前assetEntry确实对应Web内容:

import com.liferay.journal.model.JournalArticle;

// 检查assetEntry是否属于JournalArticle类型
if (JournalArticle.class.getName().equals(assetEntry.getClassName())) {
    // 后续处理Web内容的逻辑
}

2. 通过groupId和articleId获取文章

利用assetEntry的groupId(站点ID)和classPK(作为articleId)来获取最新版本的Web内容:

import com.liferay.journal.service.JournalArticleLocalServiceUtil;

long groupId = assetEntry.getGroupId();
String articleId = String.valueOf(assetEntry.getClassPK());

// 获取最新版本的JournalArticle
JournalArticle journalArticle = JournalArticleLocalServiceUtil.getLatestArticle(groupId, articleId);

如果需要获取特定版本的文章,可以使用:

// 指定版本号,例如1.0
double version = 1.0;
JournalArticle journalArticle = JournalArticleLocalServiceUtil.getArticle(groupId, articleId, version);

3. 自定义内容渲染

拿到journalArticle后,你就可以完全控制内容的显示了,比如:

// 获取文章标题(适配当前语言环境)
String title = journalArticle.getTitle(Locale.getDefault());
// 获取原始XML格式内容
String rawContent = journalArticle.getContent();
// 获取经过模板解析后的HTML内容
String displayContent = com.liferay.journal.util.JournalArticleDisplayUtil.getDisplayContent(
    journalArticle, null, null, themeDisplay, 0, Locale.getDefault()
);

针对Liferay 7.x+的优化提示

如果你使用的是Liferay 7.x及以上版本,官方推荐用依赖注入替代静态Util类,避免静态调用的弊端:

import com.liferay.journal.service.JournalArticleLocalService;
import org.osgi.service.component.annotations.Reference;

// 注入JournalArticle服务
@Reference
private JournalArticleLocalService _journalArticleLocalService;

// 使用服务获取文章
JournalArticle journalArticle = _journalArticleLocalService.getLatestArticle(groupId, articleId);

内容的提问来源于stack exchange,提问作者halpdoge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:43:40