我遇到了这个问题。我一直在根据朋友的建议使用Grails开展一个项目。我仍然是使用Grails的新手,所以任何脚踏实地的解释都会受到高度欢迎。
我的项目是一个Web应用程序,它扫描损坏或死链接并在屏幕上显示它们。主应用程序是用Java编写的,它会在扫描进行时在系统控制台上连续显示输出(良好的链接,错误的链接,扫描的页面)。我已经使用Grails完成了我的UI,控制器,视图和数据库的实现。现在,我想在我的GSP页面的一部分中主动显示forager.gsp正在扫描的当前链接,找到的当前错误链接数和正在扫描的当前页面。
我尝试实现此活动显示的尝试包括将我的应用程序显示的输出存储在数据库中的表中的控制台上。此表有一行,随着当前分页扫描的更改,发现的良好链接数和更改的错误链接数不断更新。由于这个特殊的表不断更新,我在我的控制器中写了一个动作,它读取这一行并将结果呈现给我的UI。我现在面临的问题是我需要一种方法来在我的UI中经过一段时间后不断更新显示的结果。我希望最终输出看起来像
scanning: This page, Bad links: 8, good links: 200
所以基本上这里是我的控制器动作,它从数据库中读取表格
import groovy.sql.Sql
class PHPController {
def index() {}
def dataSource
def ajax = {
def sql = new Sql(dataSource)
def errors = sql.rows("SELECT *from links")
render (view: 'index', template:'test', model:[errors:errors])
}
}
这是我渲染test.gsp
的模板<table border="0">
<g:each in="${ errors }" var="error">
<tr><td>${ error.address }</td><td>${ error.error}</td><td>${ error.pageLink}</td></tr>
</g:each>
</table>
目前我正在使用测试用户界面,这意味着这不是我的用户界面,而是我用于测试目的的用户,比如index.gsp
<html>
<body>
<div><p>Pleaseeee, update only the ones below</p></div>
<script type="text/javascript">
function ClickMe(){
setInterval('document.getElementById("auto").click()',5000);
alert("Function works");
}
</script>
<div id="dont't touch">
<g:formRemote url="[controller:'PHP', action:'ajax']" update="ajaxDiv"
asynchronous="true" name="Form" onComplete="ClickMe()" after="ClickMe()">
<div>
<input id="auto" type="button" value="Click" />
</div>
</g:formRemote>
<div id="ajaxDiv">
<g:render template="/PHP/test"/>
</div>
</body>
</html>
我想要更新的div是“ajaxDiv”。任何试图回答这个问题的人都可以假设我没有index.gsp,可以从头开始提出解决方案。这是我到目前为止第一次使用Grails,也是我第一次以任何形式处理ajax。目的是从我的数据库中动态获取数据并显示结果。或者,如果有人知道如何直接将系统控制台的输出镜像到UI,那也很棒。
答案 0 :(得分:0)
听起来形式适合您的需求。查看表单上的Grails documentation。您应该能够使用您想要的值渲染表单而不会有太多麻烦。请务必注意您的映射,并在将index.gsp设置为为您的值呈现表单后,如果您有任何疑问,请告诉我。