Liferay Faces和头顶的远程javascript

时间:2016-12-01 01:38:01

标签: liferay-6 jsf-2.2

我正在使用Primefaces 6.0和Liferay 6.2.5 tomcat bundle开发Liferay Primefaces portlet。我正在使用Liferay Faces的旧版本方案。

然后我决定切换到6.2,2.2,primefaces和maven的here当前版本。

我的问题是我有一些使用primefaces gmap组件的portlet,所以我需要包含谷歌地图javascript,我用下面的代码做了:

    <h:head>
        <script
            src="https://maps.google.com/maps/api/js?key=MY_KEY"
            type="text/javascript" />
    </h:head>

尽管之前这种方法完美无缺,但在升级之后它无效。实际上,我不能使用上面的代码包含任何脚本。在head标签中包含远程javascript的任何帮助/解决方法?

1 个答案:

答案 0 :(得分:1)

编辑:已在Bridge Impl 4.1.0中修复了FACES-2974

这是Liferay Faces Bridge中的regression bug (FACES-2974) 4.0.0(以及3.0.02.0.0)。

要解决此问题,您可以创建具有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>