header-portlet-javascript 是否可以从系统属性中获取?
例如:
<header-portlet-javascript>${external.js.url}</header-portlet-javascript>
一般来说,这是不可能的。
但是,如果您想要包含的 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
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);
}
}
<script type="text/javascript" src="$externalJSurl"></script>