liferay中header-portlet-javascript的可配置值

时间:2012-11-01 16:27:12

标签: header liferay portlet

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

例如:

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

1 个答案:

答案 0 :(得分:1)

一般情况下,这是不可能的。

但是,如果您希望包含的Javascript在门户网站的每个页面上都可以使用,那么您可以在Liferay主题中添加对它的引用。在主题内部,您可以执行动态内容来检索正确的JS URL,例如使用门户网站属性:

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

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

portal.properties

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>