首页 > 解决方案 > 是否可以在 Liferay 7.1 中使用 JavaScript 或 api/jsonws 从 portal-ext.properties 读取属性?

问题描述

我在 OSGi 模块下定义 AMD 模块。我必须阅读AMD 加载程序定义中的主机属性。如何从 portal-ext.properties 文件中读取属性?

下面是我如何在 portal-ext.properties 文件中定义 AMD 模块和属性的示例代码。

门户-ext.properties

# host detail
host={{host_url}}

定义 AMD 模块

Liferay.Loader.define('genelec-shopping-cart', [], function(){
    const host = ""; //here i have to read the property
    return{
        getHost:function(){
            return host;
        },
    };
});

标签: liferay-7.1

解决方案


您可以使用 ftl 或 jsp 执行此操作,构建嵌入值的 JS。除了从 JSP 创建整个代码之外,您还可以只构建它的一小部分,将值添加到 JS 变量,使其可用于稍后加载的脚本。

假设您有一个包含 JS 代码的 OSGi 模块,您可以创建一个 .js.jsp 来在发送之前构建 JS。

使用 JSP 创建一小部分 JS:

<%@ page contentType='application/javascript' %>

//here i have to read the property -> do it in java

Liferay.Loader.define('genelec-shopping-cart', [], function(){
    const host = "${read_in_java}"; 
    return{
        getHost:function(){
            return host;
        },
    };
});

您可以将它从其他 JSP 文件中包含为:

<c:url var='url' value='/variables.js.jsp'>
    <c:param name='namespace' value='${namespace}'/>
</c:url>

<script src='${url}'></script> 

但是正如您提到的主机,您可能正在寻找比这更简单的东西(特别是因为这是一种黑客攻击),使用 Liferay 的 JS api:

Liferay.ThemeDisplay.getPortalURL() 和朋友,这里的文档: https ://dev.liferay.com/de/develop/tutorials/-/knowledge_base/7-1/liferay-javascript-apis


推荐阅读