Liferay DXP 7.0 书签模块友好URL配置不生效问题
核心问题排查
首先需要明确配置的作用边界:你当前配置的Portlet友好URL规则,仅对Liferay系统生成的、访问BookmarksPortlet自身页面/操作的内部地址生效。如果要缩短的是书签条目中存储的、用于跳转的目标URL,这类配置完全无法生效——因为书签存储的跳转目标是用户录入的原始值,不会经过Liferay的友好URL重写流程。
如果你的目标是优化访问书签条目的内部页面URL,当前配置存在3个关键问题:
- 内置Portlet匹配失效:Liferay DXP 7.0自带的BookmarksPortlet,实际
portlet-name为全限定格式的com_liferay_bookmarks_web_portlet_BookmarksPortlet,你在liferay-portlet.xml中写的短名BookmarksPortlet无法匹配到系统内置Portlet,对应的友好URL配置根本不会被加载。 - 路由规则参数不兼容:routes.xml中定义的路径占位符
/{Bookmark}不符合Liferay 7.0友好路由规范,既没有将占位符与Portlet实际业务参数绑定,也没有覆盖书签访问必需的参数(如条目ID、文件夹ID),就算配置生效,也仅能匹配Portlet默认首页,无法定位到具体书签的详情页。 - 业务逻辑映射缺失:当前路由仅配置了基础的view动作隐式参数,没有定义书签详情页对应的action值,也没有将路径中的参数值映射到Portlet请求参数上,无法完成正常的页面跳转。
对应调整方案
- 若目标是缩短书签条目的跳转目标URL:无需修改Portlet友好URL配置,可通过开发全局URL重写Filter,或使用Liferay自带的短链接生成能力,将长目标URL转换为短地址后存入书签条目即可。
- 若目标是缩短书签页面的内部访问URL:
- 将liferay-portlet.xml中的
portlet-name替换为与内置Portlet完全一致的全限定名,确保配置能被系统识别匹配。 - 调整routes.xml的路由结构,将业务参数绑定到路径占位符,核心参考结构(占位符统一小写,明确参数映射关系):
<routes> <route> <pattern>/{entryId}</pattern> <implicit-parameter name="p_p_id">com_liferay_bookmarks_web_portlet_BookmarksPortlet</implicit-parameter> <implicit-parameter name="p_p_lifecycle">1</implicit-parameter> <implicit-parameter name="p_p_state">normal</implicit-parameter> <implicit-parameter name="p_p_mode">view</implicit-parameter> <implicit-parameter name="action">view_entry</implicit-parameter> <parameter name="entryId"> <from-path>entryId</from-path> <to-parameter-name>entryId</to-parameter-name> </parameter> </route> </routes> - 不要直接修改系统内置的Portlet安装包文件,需通过OSGi模块扩展的方式覆盖原有友好URL配置,避免系统升级后配置被重置。
- 将liferay-portlet.xml中的
内容的提问来源于stack exchange,提问作者sheldon
相关产品推荐
相关产品推荐

