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

Liferay7.2自定义JSP Hook中使用JournalArticle类报错求助

Liferay PortalHook自定义JSP导入JournalArticle报错修复方案

报错根因

仅可导入类型,com.liferay.journal.model.JournalArticle被识别为包属于Liferay自定义JSP场景的典型类加载问题,触发原因有两个:

  1. pom依赖配置错误,你引入的com.liferay.journal.pai为拼写错误,正确artifactId为com.liferay.journal.api
  2. PortalHook模块的依赖默认不会暴露给JSP编译上下文,Tomcat编译JSP使用的类加载器无法识别模块内引入的依赖

修复步骤

  • 修正pom依赖配置
    替换原有错误的journal依赖,注意版本必须和你当前Liferay运行环境内置的journal api版本完全一致,scope固定为provided避免类冲突:
<dependency>
    <groupId>com.liferay</groupId>
    <artifactId>com.liferay.journal.api</artifactId>
    <version>你环境匹配的版本号</version>
    <scope>provided</scope>
</dependency>
  • 配置CustomJspBag类加载器
    在你实现的XCustomJspBag类中重写getClassLoader方法,返回当前模块的类加载器,让JSP编译时可以读取模块的依赖配置:
@Override
public ClassLoader getClassLoader() {
    return XCustomJspBag.class.getClassLoader();
}
  • 清理缓存重新部署
  1. 停止Tomcat服务
  2. 完全清空Tomcat work目录缓存:C:\x\bundles\tomcat-9.0.17\work\Catalina\localhost\ROOT\
  3. 清空Liferay实例osgi/state目录下的所有缓存文件
  4. 重新构建部署PortalHook模块,启动Tomcat

验证方案

如果修复后仍存在报错,可先去掉JSP的导入语句,直接用全类名调用验证类可见性:

<%
com.liferay.journal.model.JournalArticle article = null;
// 后续业务逻辑
%>

全类名调用无报错则为导入语句的缓存问题,重复清理work目录重启即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:21:02