header-portlet-javascript是否可以从系统属性中获取?
例如:
<header-portlet-javascript>${external.js.url}</header-portlet-javascript>
答案 0 :(得分:1)
一般情况下,这是不可能的。
但是,如果您希望包含的Javascript在门户网站的每个页面上都可以使用,那么您可以在Liferay主题中添加对它的引用。在主题内部,您可以执行动态内容来检索正确的JS URL,例如使用门户网站属性:
#set($jsUrl = $propsUtil.get("external.js.url"))
<script type="text/javascript" src="$jsUrl"></script>
要使系统属性具有相同的效果,事情会变得复杂一些。据我所知,没有办法从注入的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>