我的grails应用程序中有一个页面X,它有一个显示图表的按钮。它将使用域对象的id调用控制器,并在另一个页面中呈现图表。直到这里,一切都很清楚。
但是我必须每隔20秒重新加载呈现的图表页面。我的网站是私人网站,只有很少的管理员用户。所以我决定使用简单的javascript轮询来进行刷新。
这是图表gsp
页面中的片段,我想每20秒重新加载一次。也许使用javascript setInterval
。
<g:render id="chart" template="/building/${chartTemplate}" model="${model}"></g:render>
我的控制器需要在创建图表时传入传感器ID,我可以使用java脚本来执行此操作吗?如果是这样,我怎么能从最初重定向它的控制器到javascript函数。
这是我的GSP模板,用于呈现图表。
<div id="linechart"></div>
<gvisualization:lineCoreChart dynamicLoading="${true}" elementId="linechart" title="${title}"
width="${750}" height="${450}" columns="${columns}" data="${data}"/>
我使用过的一些奇怪的javascript,但没有用。
<input type="text" id="sensorid" disabled="disabled" value="${sid }"/>
<g:javascript>
var int=self.setInterval("chart()",1000);
var sensid;
function chart(){
var d=new Date();
var t=d.toLocaleTimeString();
sensid = document.getElementById("sensorid").value;
}
${remoteFunction(controller:"building", action:"createChart", params:"'sid=' + sensid")}
</g:javascript>
有没有一种方法可以让javascript重新加载页面。整页重新加载也很好。我几乎没有javascript的知识,所以任何帮助都非常感谢。
答案 0 :(得分:2)
由于您提到重新加载整个页面是可以接受的,因此有两种简单的方法:
1)在您的GSP中包含META REFRESH标签。例如:
<meta http-equiv="refresh" content="5">
这非常方便,特别是如果您不需要更改参数(例如,如果控制器处理任何内容,例如用于更新图表的临时日期/时间等)。
2)通过Javascript“setTimeout”或特定操作,调用reload(或“history.go(0)”或“window.location.href = window.location.href”)。
例如,有一个按钮动作来测试它:
<input type="button" value="Reload this page" onClick="window.location.reload();">
或者每隔5秒自动执行一次,例如在这里(极度剥离,所以是的,我跳过了头部,身体和其他标签之类的东西......)HTML示例:
<script>
setTimeout("window.location.reload()",5000);
</script>
Hello world.
这使您可以更准确地控制所调用的内容,并且可以轻松修改以重定向到不同的控制器,具有新参数的相同控制器等。