Liferay 7.2.1 fragment-host下Portlet API版本适配问题咨询
Liferay 7.2 Portlet 2.0与3.0适配问题解决方案
Requires 3.0 opt-in报错的根本原因是Liferay 7.1及以上版本默认搭载Portlet 3.0规范容器,原生不再默认兼容Portlet 2.0的标签库URI调用,你可以根据项目实际情况选择以下任意一种方案解决。
方案1:官方推荐方案(成本最低、无后续兼容风险)
直接修改init.jsp中的标签库引用,将原有2.0的URI替换为3.0版本即可:
原有代码:<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
替换为:<%@ taglib uri="http://xmlns.jcp.org/portlet_3_0" prefix="portlet" %>
该方案无需修改其他配置,原有portlet标签的使用语法完全兼容,不会影响现有业务逻辑。
方案2:无需修改标签库引用的兼容方案(适合历史JSP较多的场景)
如果现有项目中存在大量使用Portlet 2.0标签库的JSP文件,逐一修改成本过高,可以通过主动声明Portlet版本的方式绕开3.0强制校验,两种配置二选一即可:
- 在fragment模块的
bnd.bnd配置文件中添加如下配置:javax.portlet.version=2.0
该配置会声明当前bundle使用Portlet 2.0规范,容器会自动兼容2.0标签库URI,无需修改任何JSP代码。 - 若模块中存在自定义portlet.xml文件,也可以在portlet-app根标签中指定版本为2.0:
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0">
注意事项
如果选择兼容Portlet 2.0的方案,将无法使用Portlet 3.0提供的异步处理、MVC 1.0注解等新特性,若没有相关需求不影响正常使用。
内容的提问来源于stack exchange,提问作者DyM
相关产品推荐
相关产品推荐

