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

Liferay 6.2迁移至7.4 Portlet:LanguageUtil.get()方法报错及正确实现方案问询

解决Liferay 7.4中LanguageUtil.get()的使用问题

我刚帮几个朋友处理过类似的Liferay版本迁移问题,你的报错其实是因为Liferay 7.x对Portlet API和资源加载机制做了不少调整,原来6.2里依赖的pageContext获取PortletConfig的方式已经被废弃或者不再兼容了,咱们一步步来解决:

首先,推荐的最佳实践:用Liferay UI标签库(比LanguageUtil更简洁)

在JSP里,Liferay提供了专门的标签来处理国际化消息,这是官方推荐的方式,完全不需要手动调用LanguageUtil,还能避免上下文问题:

  1. 先在JSP顶部引入Liferay UI标签库:
<%@ taglib prefix="liferay-ui" uri="http://liferay.com/tld/ui" %>
  1. 直接使用<liferay-ui:message>标签获取国际化文本:
<liferay-ui:message key="your.message.key" />

如果一定要用LanguageUtil的话,正确的调用方式

如果你因为某些场景必须用LanguageUtil,别再用pageContext或者直接传themeDisplay.getLocale()了,要传递包含Portlet上下文的对象,比如HttpServletRequest或者PortletRequest:

场景1:在JSP中使用

<%@ page import="com.liferay.portal.kernel.language.LanguageUtil" %>
<%
// 直接用request,它包含了当前的Locale和Portlet上下文
String message = LanguageUtil.get(request, "your.message.key");
%>
<span><%= message %></span>

场景2:在Portlet类(Java代码)中使用

如果是在后台Java逻辑里,你可以拿到PortletRequest的话:

import com.liferay.portal.kernel.language.LanguageUtil;
// ...

public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, IOException {
    String message = LanguageUtil.get(renderRequest, "your.message.key");
    // 后续逻辑
}

关键排查点(很多人忽略的细节)

  • 语言资源文件位置要正确:Liferay 7.x是OSGi模块结构,你的Language.properties(以及对应Locale的文件,比如Language_zh_CN.properties)必须放在模块的src/main/resources/content目录下,这和6.2的WEB-INF/content位置完全不同。
  • 确认资源文件被正确打包:如果是用Maven/Gradle构建,Liferay的插件会自动处理资源文件,但如果是手动写bnd.bnd文件,要确保添加了:
Include-Resource: content/Language.properties
  • 检查key的拼写:确保资源文件里的key和你调用时的完全一致,大小写敏感哦。

为什么原来的方式会报错?Liferay 7.x之后,Portlet作为OSGi组件运行,原来通过pageContext获取PortletConfig的方式依赖的旧API已经被标记为废弃,而且内部上下文获取逻辑也变了,所以才会抛出PortletConfig get/format methods错误。而传递request或者PortletRequest时,Liferay会自动从请求中获取当前的Portlet上下文和用户Locale,完美适配新的架构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:07:31