Grails重新加载gsp的正确方法是什么
上次更新:似乎问题与geomap有关,不想更新,现在已经使用jvectormap重写了它,因为它更符合我的要求 所以 得到了一个有两个盒子的应用程序,其中一个盒子包含一堆控制器,分辨率,区域等等。它对另一个盒子进行远程调用,然后该盒子获取数据并提取一系列内容,设置数据,然后发送到google Visualization 然而,如果我在类中使用render,它可以完美地工作,可以看到它选择了正确的变量,并且它们看起来就像从一开始就这样 问题是,如果我让它在没有渲染的情况下运行,那么gsp页面不会重新加载,并且它显示的代码与最初加载的代码相同,实际上,生成的图片会消失 我有没有办法告诉gsp页面重新加载或类似的内容 下面是remotesubmit,如果控制器呈现输出,它会像一个符咒一样工作Grails重新加载gsp的正确方法是什么,grails,Grails,上次更新:似乎问题与geomap有关,不想更新,现在已经使用jvectormap重写了它,因为它更符合我的要求 所以 得到了一个有两个盒子的应用程序,其中一个盒子包含一堆控制器,分辨率,区域等等。它对另一个盒子进行远程调用,然后该盒子获取数据并提取一系列内容,设置数据,然后发送到google Visualization 然而,如果我在类中使用render,它可以完美地工作,可以看到它选择了正确的变量,并且它们看起来就像从一开始就这样 问题是,如果我让它在没有渲染的情况下运行,那么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文件。注意,当索引对其执行一个操作以生成第一个几何图时,会生成它
<%@ 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>
好的,部分回答,但向前一步,向后两步: 因此,将其移动,最终创建了一个简单的静态版本的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,并对原始数据进行修复
我还在页面主体中加载了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>
关于最大调用堆栈,有什么建议吗?这应该可以在您不采取任何行动的情况下工作。什么版本的Grails?2.4版本,不到一个月。可能是因为该div中的gsp最初是使用OK、groovy3.6.1加载的,不确定我从中得到了什么2.4。看起来代码很有效,可以看到对数据库的正确调用以收集信息,但是由于某种原因html代码没有更新,我可以看到我将初始视图加载到div中的旧代码,相同的控制器和操作,如果我在浏览器上查看源代码,则会看到这些数据。这听起来很奇怪。如果你能在一个新的应用程序中分离出一个与你的代码相似但没有任何专有内容的小测试用例,那么创建一个JIRA问题,我们可以看看。运行GrailsBug报告来压缩测试项目,并附加该报告-bug报告包含代码,但忽略目标目录和其他派生项。Grails的最新版本是2.4.3,因此您第一次是对的。它不太可能受到Groovy版本的影响,但考虑到Grails版本,这一点很容易理解。不,我怀疑包含会影响它,但这是一个奇怪的例子,所以也许:向前一步,向后五十步。创建了一个名为show的视图,然后创建了一个名为mapdisplay的模板,它可以正常工作。我手动渲染mapdisplay视图,它会更新数据,但由于某些原因,它似乎从未使用geomap重新生成地图,我不太明白它是否会使用静态数据设置地图。