Liferay Faces 和远程 javascript inside head
Liferay Faces and remote javascript inside head
我正在使用 Primefaces 6.0 和 Liferay 6.2.5 tomcat 包开发 Liferay Primefaces portlet。我使用的是 Liferay Faces 的旧版本控制方案。
然后我决定切换到当前版本 here 6.2、2.2、primefaces 和 maven。
我的问题是我有一些使用 primefaces gmap 组件的 portlet,所以我需要包含 google 映射 javascript,我用下面的部分做到了代码:
<h:head>
<script
src="https://maps.google.com/maps/api/js?key=MY_KEY"
type="text/javascript" />
</h:head>
尽管这在之前工作得很好,但在我升级之后它就不能工作了。事实上,我不能使用上面的代码包含任何脚本。 help/workarounds 要在 head 标签中包含远程 javascript 吗?
编辑:FACES-2974 已在 Bridge Impl 4.1.0
中修复。
这是 Liferay Faces Bridge 4.0.0
(以及 3.0.0
和 2.0.0
)中的 regression bug (FACES-2974)。
要解决此问题,您可以创建一个具有 name
属性的复合组件。该名称必须以“css
”或“js
”结尾,并且每个视图应该是唯一的,以确保它始终被加载。例如,创建以下 resources/workaround/headElements.xhtml
文件:
<?xml version="1.0" encoding="UTF-8"?>
<ui:component xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:cc="http://xmlns.jcp.org/jsf/composite" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/2002/08/xhtml/xhtml1-transitional.xsd">
<!-- Workaround for https://issues.liferay.com/browse/FACES-2974 -->
<cc:interface>
<cc:attribute name="name" required="true" />
</cc:interface>
<cc:implementation>
<cc:insertChildren />
</cc:implementation>
</ui:component>
要将此组件与上述 google 地图脚本一起使用:
<h:head>
<workaround:headElements name="#{view.viewId}.js">
<script src="https://maps.google.com/maps/api/js?key=MY_KEY"
type="text/javascript" /></script>
</workaround:headElements>
<!-- ... -->
</h:head>
我正在使用 Primefaces 6.0 和 Liferay 6.2.5 tomcat 包开发 Liferay Primefaces portlet。我使用的是 Liferay Faces 的旧版本控制方案。
然后我决定切换到当前版本 here 6.2、2.2、primefaces 和 maven。
我的问题是我有一些使用 primefaces gmap 组件的 portlet,所以我需要包含 google 映射 javascript,我用下面的部分做到了代码:
<h:head>
<script
src="https://maps.google.com/maps/api/js?key=MY_KEY"
type="text/javascript" />
</h:head>
尽管这在之前工作得很好,但在我升级之后它就不能工作了。事实上,我不能使用上面的代码包含任何脚本。 help/workarounds 要在 head 标签中包含远程 javascript 吗?
编辑:FACES-2974 已在 Bridge Impl 4.1.0
中修复。
这是 Liferay Faces Bridge 4.0.0
(以及 3.0.0
和 2.0.0
)中的 regression bug (FACES-2974)。
要解决此问题,您可以创建一个具有 name
属性的复合组件。该名称必须以“css
”或“js
”结尾,并且每个视图应该是唯一的,以确保它始终被加载。例如,创建以下 resources/workaround/headElements.xhtml
文件:
<?xml version="1.0" encoding="UTF-8"?>
<ui:component xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:cc="http://xmlns.jcp.org/jsf/composite" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/1999/xhtml http://www.w3.org/2002/08/xhtml/xhtml1-transitional.xsd">
<!-- Workaround for https://issues.liferay.com/browse/FACES-2974 -->
<cc:interface>
<cc:attribute name="name" required="true" />
</cc:interface>
<cc:implementation>
<cc:insertChildren />
</cc:implementation>
</ui:component>
要将此组件与上述 google 地图脚本一起使用:
<h:head>
<workaround:headElements name="#{view.viewId}.js">
<script src="https://maps.google.com/maps/api/js?key=MY_KEY"
type="text/javascript" /></script>
</workaround:headElements>
<!-- ... -->
</h:head>