问题描述
在一个简单的应用上,我尝试了在Liferay项目上使用ExtJs,然而出乎意料的是,页面总是报属性不被支持,也搜索过类似的报错问题,但都不能解决,网页上有朋友遇到属性不被支持是因为页面的body内有不在标签内的字符串,但排除这个问题后还是用不了Ext的东西, 贴上一个简单不能再简单的代码,ext的source code 放在liferay项目的/html/js下: <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="./ext/resources/css/ext-all.css"> <script type="text/javascript" src="./ext/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="./ext/ext-all-debug.js"></script> <title>A xxxxx</title> </head><script type="text/javascript"> ExtJsCustom = function(){ Ext.MessageBox.confirm("DCMS","Do you want to override,are you sure?",function(btn){ alert("1233"); }); }</script><body><input type="button" value="Animal" id="fly" onclick="ExtJsCustom();"/></body>引用路径不存在问题,在Liferay项目上就是用不了,是否还需要别的配置,还请用过的大牛们指点,thanks!
解决方案
我刚才测试了一下,可以使用extjs 4,liferay 6.0.6+说一下我的方法:1、将extjs的资源拷贝到portlet项目的docroot/js中2、参考如下测试代码<%@page import="com.liferay.portal.kernel.util.WebKeys"%><%@page import="com.liferay.portal.model.Portlet"%><%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %><portlet:defineObjects /><%Portlet portlet = (Portlet)request.getAttribute(WebKeys.RENDER_PORTLET);%><link rel="stylesheet" type="text/css" href="<%= portlet.getContextPath() %>/js/ext/resources/css/ext-all.css"><input type="button" value="Animal" id='<portlet:namespace/>fly' onclick="<portlet:namespace/>ExtJsCustom();"/><script type="text/javascript" src="<%= portlet.getContextPath() %>/js/ext/bootstrap.js"></script><script type="text/javascript"><portlet:namespace/>ExtJsCustom = function(){Ext.MessageBox.confirm("DCMS","Do you want to override,are you sure?",function(btn){alert("1233");});}</script>
解决方案二:
Portal引用资源跟普通的jsp不一样,需要加上contextPath,而且为了避免对象冲突,最好给js调用的对象加上namespace,例如:<input type="text" id="<portlet:namespace/>MyText"/>document.getElementById('<portlet:namespace/>MyText');而且你这样写也不规范啊,portlet是没有body的,直接作为html的片段被解析上去的。