2014-02-12 61 views
0

我遇到了這個問題。基於朋友的建議,我一直在使用Grails開發一個項目。我仍然是使用Grails的新手,所以任何腳踏實地的解釋都會受到高度的歡迎。Grails中的動態顯示

我的項目是一個Web應用程序,它可以掃描破損或死鏈接並將它們顯示在屏幕上。主要應用程序是用Java編寫的,並且隨着掃描的繼續,它會在系統控制檯上持續顯示輸出(良好鏈接,不良鏈接,掃描頁面)。我已經完成了使用Grails實現我的UI,控制器,視圖和數據庫。現在,我想在我的GSP頁面的一部分中主動顯示forager.gsp當前正在掃描的鏈接,當前發現的不良鏈接數量以及正在掃描的當前頁面。

我試圖實現這種活動顯示的嘗試包括將我的應用程序顯示輸出存儲在控制檯中的數據庫表中。這個表格有一個單獨的行,它隨着當前分頁掃描的變化而不斷更新,找到的好鏈接的數目變化以及發現變化的不良鏈接的數目。由於這個特定的表不斷更新,我在我的控制器中寫了一個動作,它讀取這一行,並將結果呈現給我的用戶界面。我現在面臨的問題是,我需要一種方法,不斷更新在我的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。目的是從我的數據庫中動態獲取數據並顯示結果。或者如果有人知道如何直接將輸出從系統控制檯映射到用戶界面,那也會很棒。

+0

我很感謝您對我的帖子所做的更改。我已經通過你的個人資料,並意識到你必須是一個非常好的Grails專家。如果你能幫忙爲我提供一些東西,這將是非常好的。 – user3295929

回答

0

這聽起來像一個表格將適合您的需求。查看錶單上的Grails documentation。您應該能夠使用您想要的值顯示錶單,而不會有太多麻煩。一定要注意你的映射,並讓我知道如果你有任何問題後,你已經設置index.gsp爲呈現您的價值觀的形式。

+0

我實際上是通過標記來使用表單,它基本上是一個標記。我想要做的就是反覆調用一個動作,以便刷新頁面中的特定元素。我面臨的問題是,一旦我提交表單,我就無法使用setTiemout或setInterval來調用(觸發)提交表單的按鈕。我只想用我的數據庫中更新的數據刷新我的頁面 – user3295929

+0

您可以添加一些JavaScript,每隔20秒刷新一次元素(例如),直到您的後臺進程沒有任何更改, ?如果這是您的選項,那麼標記將會很有幫助。 – Nathan

+0

實際上,我認爲只刷新元素不會有很大幫助,因爲傳遞給它的數據不會被刷新。這就是爲什麼我試着刷新(回顧)在刷新元素之前從數據庫獲取數據的控制器操作。但是,正如我之前提到的,因爲動作(控制器)必須在

標記內調用,所以似乎無法使用JavaScript多次(刷新)提交(在標記內調用提交按鈕),而這正是我的上面的代碼面臨一個問題。我接受任何全新的建議 – user3295929