4

header-portlet-javascript 是否可以从系统属性中获取?

例如:

<header-portlet-javascript>${external.js.url}</header-portlet-javascript>
4

1 回答 1

1

一般来说,这是不可能的。

但是,如果您想要包含的 Javascript 出现在您的门户的每个页面上是可以的,您可以在 Liferay 主题中添加对它的引用。在主题内,您可以执行动态操作来检索正确的 JS url,例如使用门户属性:

#set($jsUrl = $propsUtil.get("external.js.url"))
<script type="text/javascript" src="$jsUrl"></script>

要对 System 属性产生相同的效果,事情会变得更复杂一些。据我所知,没有办法从注入的 Velocity 变量中获取系统属性。因此,我们需要创建一个小的事件处理程序挂钩,将这个属性注入到 Velocity 上下文中。

门户网站属性

servlet.service.events.pre=my.custom.ServicePreAction

ServicePreAction.java

public class ServicePreAction extends Action {

    public void run(HttpServletRequest request, HttpServletResponse response) {
        Map<String,Object> veloVars = new HashMap<String,Object>();
        veloVars.put("externalJSurl", System.getProperty("external.js.url"));
        request.setAttribute(WebKeys.VM_VARIABLES, veloVars);
    }

}

portal_normal.vm

<script type="text/javascript" src="$externalJSurl"></script>
于 2013-02-12T08:50:54.453 回答