0

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の知識がほとんどないので、どんな助けでも大歓迎です。

4

1 に答える 1

2

ページ全体のリロードは許容できるとおっしゃっているので、2つの簡単な方法は次のようになります。

1)GSPにMETAREFRESHタグを含めます。例えば:

<meta http-equiv="refresh" content="5">

これは、特にパラメータを変更する必要がない場合(たとえば、コントローラがチャートの更新に使用される現在の日付/時刻などを処理する場合)に非常に便利です。

2)Javascriptの「setTimeout」または特定のアクションを介して、リロード(または「history.go(0)」または「window.location.href = window.location.href」)を呼び出します。

たとえば、それをテストするためのボタンアクションの場合:

<input type="button" value="Reload this page" onClick="window.location.reload();">

または、次のように5秒ごとに自動的に実行します(非常に削除されているため、head、body、その他のタグなどはスキップしました。)HTMLの例:

<script>
setTimeout("window.location.reload()",5000);
</script>

Hello world.

これにより、呼び出すものをより正確に制御でき、別のコントローラー、新しいパラメーターを持つ同じコントローラーなどにリダイレクトするように簡単に変更できます。

于 2012-06-17T20:17:45.047 に答える