我正在努力将第三方javascript库集成到Liferay门户的Vaadin WidgetSet中。我正在使用Vaadin版本6.7.3和Liferay 6.1。
到目前为止,有两个独立的项目,每个项目都会生成一个不同的jar文件。两个模块描述符中的inherits
元素是相同的:
<inherits name="com.vaadin.portal.gwt.PortalDefaultWidgetSet" />
当我使用Vaadin Liferay控制面板重新编译我的WidgetSet时,我看到编译的结果被转储到tomcat-folder/webapps/ROOT/html/VAADIN/widgetsets/com.vaadin.portal.gwt.PortalDefaultWidgetSet
,这是预期的。
每个Widget在其客户端模块描述符中定义自己的javascript和样式表,如下所示:
<script src="script_1.js"></script>
<stylesheet src="styles_1.css"></stylesheet>
<script src="script_2.js"></script>
<stylesheet src="styles_2.css"></stylesheet>
由于每个javascript文件和样式表的名称不同,我看到文件夹tomcat-folder/webapps/ROOT/html/VAADIN/widgetsets/com.vaadin.portal.gwt.PortalDefaultWidgetSet
确实包含script_1.js
,script_2.js
,styles_1.css
和styles_2.css
。
问题在于名称冲突。这两个小部件在样式表/ javascript文件中定义样式和函数,但有些名称相同,这会导致意外行为。使用firebug,我已经确认在使用其中一个小部件时都会加载样式表和两个javascript文件。我还检查过,如果我取消部署其中一个小部件并重新编译小部件集,它就能完美运行。
由于这些javascripts和样式表实际上是第三方提供的,并且因为我的阅读乐趣而被混淆,因此通过所有名称来解决冲突将会有点乏味。
我试图强制gwt编译器通过在客户端模块描述符中传递属性来重命名widgetset,如下所示:
<set-property name="widgetset" value="custom.widgetset.FooBarWidgetSet"/>
也是如此:
<set-configuration-property name="widgetset" value="custom.widgetset.FooBarWidgetSet"/>
我原以为每个小部件都会为每个小部件创建tomcat-folder/webapps/ROOT/html/VAADIN/widgetsets
下的不同文件夹,但它不起作用。说实话,我不确定这是否可行,因为Vaadin Liferay控制面板有一个字段说明 Active WidgetSet (见this related image)
我的问题是:如何解决不同样式表/ javascript文件中的名称冲突?