我尝试在Liferay7.0中使用Arcgis javascript,但它失败了。我认为,因为Liferay7.0使用requireJS来使用javascript,这与的dojo冲突。我使用这个代码来实现Arcgis:
<script type="text/javascript" src="<%=request.getContextPath() %>/js/arcgis_js_api/library/3.14/3.14/init.js"></script>
<script>
require([
"esri/map", "dojo/dom"
], function(Map, dom) {
var map = new esri.Map("map", {
basemap: "topo", //For full list of pre-defined basemaps, navigate to http://arcg.is/1JVo6Wd
center: [-122.45, 37.75], // longitude, latitude
zoom: 13
});
});
这是控制台日志:
java.lang.IllegalArgumentException: Path esri/map.js does not start with a "/" character
java.lang.IllegalArgumentException: Path dojo.js does not start with a "/" character
这是javascript错误:
Error: defineAlreadyDefined
任何有解决办法的人请帮帮我。谢谢!
发布于 2017-04-18 20:49:07
在实现arcgis (Javascript)之前,我使用此代码:
if(typeof define !== "undefined" && typeof require !== "undefined"){
window.__define = window.define;
window.__require = window.require;
window.define = undefined;
window.require = undefined;}
它将被解决。
发布于 2017-03-23 00:55:20
正如您提到的Liferay7和脚本标记使用了<%=request.getContextPath()%>
一样,您的portlet与servlets之间很可能不匹配:request
不知道任何portlet上下文(但仍然存在,因为JSP是为servlet设计的,而且它是一个强制对象,它周围有很多人感到恼火)
您自己的Javascript文件的URL不是相对于上下文根的,但是Liferay使它们在不同的路径上可用。最简单的方法是,在不影响这个位置的情况下,只需提到您希望在portlet配置中包含的文件。在Liferay 7 OSGi portlet模块中,它的工作方式如下(伪代码,简化)
@Component(
immediate = true,
property = {
"com.liferay.portlet.footer-portlet-javascript=/js/main.js",
"javax.portlet.display-name=My Portlet",
},
service = Portlet.class
)
在打包在WAR中的JSR-286 portlet中,您可以在WEB/生发-portlet.xml中使用脚注- portlets值。
或者,使用header-*
变体。
我个人更喜欢这种方式,而不是记住资源的路径是如何构建的。
https://stackoverflow.com/questions/42969496
复制