1

私の見解では、フラッシュ メッセージのセクションがあります。

<g:if test="${flash.message}">
    <section id="flashTile">
        <div class="alert fade in">
            <a class="close" data-dismiss="alert" href="#">&times;</a>
        <p>${flash.message}</p>
        </div>
    </section>
</g:if>

ビューのある時点で、コントローラーでアクションを呼び出します。

<g:form action="doAction">
   <g:submitButton class="ghbtn" name="doAction" />                 
</g:form>

コントローラーのアクションは次のようになります。

def doAction() {
    try {
        flash.message = 'Computing...'
        webserviceService.compute()
        flash.message = 'Computed'
        redirect(action: "list")
        return
    } catch (Exception e2) {
        flash.message = 'Could not compute'
        redirect(action: "list")
        return
    }
}

doActionボタンをクリックしてwebserviceService.compute()正常に実行されると、「Computed」メッセージが表示されます。エラーが発生すると、「計算できませんでした」というメッセージが表示されます。これはうまくいきます。

webserviceService.compute()実行には数秒かかるため、システムがリクエストを受信して​​処理していることをユーザーに通知したいと思います。そうしないと、ユーザーは機能していない可能性があり、ボタンを再度クリックします。

doAction別のフラッシュ メッセージ「Computing...」を追加しました。これは、Web サービスが実行されるまでクリックした直後に表示されるはずです。

ワークフローは次のようになります。

クリックdoAction-> 「コンピューティング...」を表示

webserviceService.compute()実行 -> 「計算中...」は「計算済み」または「計算できませんでした」に置き換えられます

ここでの唯一の問題は、'Computing...' が表示されないことです。これに関するヒントはありますか?


ヒントをありがとう。私は今、自分のフォームを次のように変更しました

<g:form action="calculate" onsubmit="return calculating()">

<script type="text/Javascript">                      
    function calculating() {   
        alert("come here");
        return true;
</script>

アラート行の代わりに、flash.message を変更したいのですが、これに関して役立つものは何も見つかりませんでした。誰かヒントをくれませんか?

4

1 に答える 1

3

リクエスト/レスポンス サイクルがどのように機能するかについて、根本的な誤解があります。これに基づいて:

flash.message = 'Computing...'
webserviceService.compute()
flash.message = 'Computed'
redirect(action: "list")
return

「コンピューティング」がビューに戻されると思う理由は何ですか? それはしません。問題に JavaScript を適用する必要があります。

JoshDM が述べたようにボタンを無効にするか、JavaScript を使用して、ユーザーに待機するように伝えるメッセージを表示できます。どちらも、送信ボタンのクリック イベントで発生する必要があります。

ここにも Ajax ソリューションがありますが、あなたの現在の理解を考えると、現時点では問題が複雑になるだけだと思います。

于 2013-02-05T16:56:31.087 に答える