如何解决Liferay DXP 7.3.10 GA1中update_password.jsp覆盖后不生效的问题?
解决Liferay自定义JSP覆盖不生效的问题
你已经完成了大部分正确步骤,但浏览器仍加载旧页面,咱们一步步排查可能的问题:
1. 核对自定义JSP的路径是否完全匹配
确保你的自定义JSP放在模块的src/main/resources/META-INF/resources/html/portal/update_password.jsp位置。Liferay对自定义JSP的路径要求严格,必须和portal-web中的原路径完全一致,哪怕拼写错误或层级少一层都会导致失效。
2. 提升service.ranking的优先级
你设置的112可能不足以覆盖内置模块的优先级,试试把值调得更高,比如service.ranking:Integer=200。改完后重新部署模块,让你的CustomJspBag能优先被系统加载。
3. 清除缓存(浏览器+服务器)
这是最容易被忽略的关键点:
- 浏览器端:按
Ctrl+Shift+R(Windows/Linux)或Cmd+Shift+R(Mac)强制刷新,绕过本地缓存。 - Liferay服务器端:
- 进入控制面板 → 服务器管理 → 缓存,点击「清除全部缓存」。
- 也可以手动删除Liferay临时目录(
[liferay-home]/work、[liferay-home]/temp)的内容,之后重启服务器。
4. 检查CustomJspBag类的实现细节
确认你的子类正确实现了必要方法,尤其是这两个:
@Override public Map<String, String> getCustomJsps() { Map<String, String> customJsps = new HashMap<>(); customJsps.put( "/html/portal/update_password.jsp", "/META-INF/resources/html/portal/update_password.jsp" ); return customJsps; } @Override public String getServletContextName() { return "你的模块Bundle-SymbolicName"; }
注意getServletContextName必须返回你模块的Bundle Symbolic Name,不能写错。
5. 确认模块的加载状态
- 打开Gogo Shell,执行
lb命令找到你的模块,确认状态是Active。 - 执行
bundle:diag [模块ID],查看是否存在类加载相关的错误。 - 查看Liferay日志,搜索你的CustomJspBag类名,确认它被系统正确初始化加载。
6. 验证页面的实际调用路径
用浏览器开发者工具查看网络请求,确认当前加载的是哪个页面的内容。有时候原页面可能被其他JSP或模板间接调用,或者存在动态包含的情况,这时候你需要覆盖对应的目标页面。
如果以上步骤都试过仍未解决,可以把CustomJspBag的代码和模块的bnd文件内容贴出来,我再帮你深入排查。
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

