博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于Liferay的平台下,portlet在各个模式下分别加载以<footer-portlet-javascript>定义的js文件的不可行性...
阅读量:5918 次
发布时间:2019-06-19

本文共 1350 字,大约阅读时间需要 4 分钟。

引入:

项目组问我,如果一个Portlet有多个模式(比如我们以前开发的某portlet同时有view模式和config模式),而我们前端用的extjs mvc的架构,并且主文件是main.js,这个main.js是用以下的<footer-portlet-javascript>定义在liferay-portlet.xml中,如下:

那么可能不可能让view.jsp(view模式的页面文件)和config.jsp(config模式的页面文件)分别加载2次main.js而不是共享同一个 main.js呢?

分析:

我仔细研究了一下,发现这是不可能做到的,以下是理由和我的想法。

首先,对于我们在iferay-portlet.xml中以这种方式定义的加载js文件,最终会被Liferay框架的PortletLocalServiceImpl的第1549-1551 行读取并且处理。

换句话说,我们这些所有的<footer-portlet-javascript>的配置,都会被框架读取并且加入到footerPortletJavaScriptList列表中。

那么这些列表中的js文件如何被使用呢?阅读Liferay源码,我们找到了,它原来在bottom_portlet_resources_js.jspf文件中,见第33行:

可以发现,它会读取刚才的footerPortletJavaScriptList,然后吧所有的资源文件路径解析为绝对路径,然后分别用<script src>的方式引入。

bottom_portlet_resource_js.jspf中会被bottom.jsp引入:


bottom.jsp会在init.vm364行被存入一个vm变量叫$bottom_include中:

$bottom_include会在我们的theme中的portal_normal.vm65行被引入:

总结:

因为我们一定会使用theme,无论使用默认的还是我们自定义的比如本例的platform_theme,不管哪一个,其中必定会包含portal_normal.vm,它会包含bottom.jsp,进而包含bottom_portlet_resources_js.jspf

而这个jspf页帧则包含了所有以footer-portlet-javascript形式给出的js资源文件。因为我们这个portal_normal.vm是项目框架级别的,所以只会解析一次,并且所有的页面都在这个框架中。

这就是为什么js资源只会加载一次的原因,而且无论是iframe,或者额外弹出页面,都在这个框架中,所以都会读到这些js文件,并且是相同的js文件。

从这个意义上说,我们让其分别引入js文件,并且都是main.js文件,并且都以footer-portlet-javascript给出的是不可行的,除非,这个js文件不定义在liferay-portlet.xml<footer-portlet-javascript>元素中

本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1302437,如需转载请自行联系原作者
你可能感兴趣的文章
Android进阶篇-百度地图获取地理信息
查看>>
返回前一页并刷新页面方法
查看>>
2.3 InnoDB 体系架构
查看>>
不定宽高垂直居中分析
查看>>
项目管理学习笔记之二.工作分解
查看>>
C# PPT 为形状设置三维效果
查看>>
js数组实现不重复插入数据
查看>>
aidl跨进程通讯
查看>>
如何确定所运行的 SQL Server 2005 的版本?
查看>>
我的友情链接
查看>>
老李分享:qtp自动化测试框架赏析-关键字自动化测试框架 2
查看>>
忙里偷闲 -- 工作随笔
查看>>
springboot报编译失败 Compilation failure
查看>>
mysqld error(一)
查看>>
Javascript延时函数
查看>>
UML类图关系大全
查看>>
Ant编译Hadoop 1.0.3的eclipse-plugin插件包
查看>>
tensorflow开发环境搭建
查看>>
JDBCRealm Http Digest
查看>>
CentOS 7 网络配置
查看>>