最后更新:似乎问题与geomap有关并且不想更新,现在使用jvectormap重写它,因为它更符合我的要求。
所以
有一个有两个盒子的应用程序,一个包含一堆控制器(分辨率,区域和东西)。它对第二个盒子进行远程调用,然后获取该数据并提取大量内容,设置数据然后发送到谷歌可视化。
但是,如果我在类中使用render它完美地工作,可以看到它拾取正确的变量,并且它们看起来就像从一开始就做的那样。
问题是,如果我让它在没有渲染的情况下运行,那么gsp页面不会重新加载,它显示的代码与最初加载的相同(实际上,生成的图片消失了)
有没有办法告诉gsp页面重装或类似?
下面是一个像魅力(如果控制器呈现输出)的遥控器提交
<g:formRemote name="mapRepmote" on404="alert('not found!')" update="page-body"
url="[controller: 'mapren', action:'show']">
<g:if test="${listreg == 'true'}">
Regulation: <g:select name="regsel" from="${reglist}" value="${regreq}" />
</g:if>
<g:else>
Regulation: ${regreq}
</g:else>
Resolution: <g:select name="ressel" from="${reslist}" value="${resreq}" />
Region: <g:select name="mapsel" from="${maplist}" value="${mapreq}" />
<div id="bupdate"><Button type="submit">Update</Button></div>
</g:formRemote>
编辑:到底是什么 所以一直在玩,并一遍又一遍地得到相同的结果。 所以mapren控制器的show动作似乎确实被调用了。我可以看到对db层和所有的调用。如果我添加三个render语句,我可以看到请求进入。
def show(String regsel, String mapsel, String ressel) {
String mapcode
switch (mapsel) {
case "World":
mapcode="world"
break
case "Europe":
mapcode=150
break
case "Asia":
mapcode=140
break
case "Africa":
mapcode=002
break
case "Central Ameirca":
mapcode=017
break
case "Pacific":
mapcode=035
break
default:
mapcode="world"
}
def restem = ressel.split('x')
String mwidth = restem[0]
String mheight = restem[1]
render "I was asked to show reg: ${params.regsel} <BR>map: ${params.mapsel}<BR>Resolution ${params.ressel}<BR>"
render "will generate map for ${regsel} on code ${mapcode} resolutio"
render "I will ${mwidth} and ${mheight}"
def query = Regstat.where {
(reg==regsel)
}
def regcolumns = [['string', 'Country'],['number', regsel + 'Status']]
def results = query.list(sort:"lupdate")
def regdata = []
results.each {
regdata << [it.country.countryname,it.status]
}
def RegColors = ['0xF0F0F0','0x66CCFF','0x0000FF','0xCC66FF','0x9900CC','0x7D7D7D']
[reg_columns: regcolumns, reg_data: regdata,reg_colors: RegColors, regioncode: mapcode, wwidth: mwidth, wheight: mheight]
}
}
但是如果我删除了渲染调用,我原以为show.gsp会被加载吗? 但没有这样的运气。 附上了show.gsp文件。注意,当索引针对它生成第一个geomap时会生成它。
<%@ page import="org.grails.plugins.google.visualization.util.DateUtil" %>
<html>
<head>
<script src="http://maps.google.com/maps?file=api&v=2&key=ABCDEFG" type="text/javascript"></script>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
</head>
<body>
<script type="text/javascript">
function selectHandler(e) {
alert('A table row was selected');
}
</script>
<gvisualization:geoMap elementId="page-body" showLegend="${false}" region="${regioncode}" width="${wwidth}" height="${wheight}" colors="${reg_colors}" columns="${reg_columns}" data="${reg_data}" />
</body>
</html>
答案 0 :(得分:0)
好的,部分答案,但向后退一步:)
所以移动它并最终创建了一个mapren的直接静态版本,它有一个控制器(staticmapren)和一个模板(_mapdisp)。这些似乎工作正常,每次请求进入时,页面现在正确地使用文本更新。
问题是geomap只是第一次显示。 与此斗争了很多,然后意识到可能(只是可能)javascript控制台可能有关于此的事情...... 是的,事实证明......
Uncaught RangeError: Maximum call stack size exceeded
红鲱鱼嗯,也许,似乎那个人想要重装或不重装。它发生在大约40秒后,所以仍然没有线索为什么地图只是第一次出现
我的问题是,我究竟能做些什么,我是否可能会破坏物体并每次都获得一个新物体。
控制器的简化版本是:
类StaticmaprenController {
def index() {
render "I am an index"
}
def show(String regsel, String mapsel, String ressel) {
String mapcode
mapcode="world"
def restem = ressel.split('x')
String mwidth = restem[0]
String mheight = restem[1]
//render "I was asked to show reg: ${params.regsel} <BR>map: ${params.mapsel}<BR>Resolution ${params.ressel}<BR>"
//render "will generate map for ${regsel} on code ${mapcode} resolutio"
//render "I will ${mwidth} and ${mheight}"
def regcolumns = [['string', 'Country'],['number', regsel + ' Status']]
def RegColors = ['0xF0F0F0','0x66CCFF','0x0000FF','0xCC66FF','0x9900CC','0x7D7D7D']
def regdata = [['UK','3'],['United States','2'],['Russia','4']]
String content = g.render (template:"mapdisp", model:[reg_columns: regcolumns, reg_data: regdata,reg_colors: RegColors, regioncode: mapcode, wwidth: mwidth, wheight: mheight])
render content
[reg_columns: regcolumns, reg_data: regdata,reg_colors: RegColors, regioncode: mapcode, wwidth: mwidth, wheight: mheight]
}
}
和_mapdisp模板
Going to elementId="page-body" <BR>
Testing some stuff showLegend="${false}" <BR>
Will do region="${regioncode}" <BR>
Lets go width="${wwidth}" and height="${wheight}"<BR>
And these are the Beutiful colours colors="${reg_colors}" <BR>
Now columns columns="${reg_columns}"<BR>
And the data="${reg_data}"<BR>
<script type="text/javascript">
function selectHandler(e) {
alert('A table row was selected');
}
</script>
<gvisualization:geoMap elementId="geomap2" showLegend="${false}" region="${regioncode}" width="${wwidth}" height="${wheight}" colors="${reg_colors}" columns="${reg_columns}" data="${reg_data}" />
</body>
<div id="geomap2"></div>
</html>
要获得geomap和google可视化,您需要安装api,并使用raw(Google Visualization API. Graphs are not displaying in gsp pages)进行一些修复
我还在页面主体中加载了api。 (添加以下行)
<%@ page import="org.grails.plugins.google.visualization.util.DateUtil" %>
<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="genmap-desk"/>
<script src="http://maps.google.com/maps?file=api&v=2&key=ABCDEFG" type="text/javascript"></script>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
关于最大调用堆栈我可以做些什么建议?