【问题标题】:grails show flash message in view while executinggrails 在执行时在视图中显示 Flash 消息
【发布时间】:2013-02-05 16:45:59
【问题描述】:

在我看来,我的 Flash 消息有一个部分:

<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() 成功执行时,我收到“已计算”消息;发生错误时,我收到“无法计算”消息。这很好用。

由于webserviceService.compute()执行需要几秒钟,我想通知用户系统收到请求并正在处理它,否则用户可能无法正常工作并再次单击按钮。

我添加了另一个 Flash 消息“正在计算...”,它应该在单击 doAction 后立即显示,直到 web 服务被执行。

工作流程应如下所示:

点击doAction -> 显示“正在计算...”

webserviceService.compute() 已执行 -> 'Computing...' 替换为 'Computed' 或 'Could not compute'

这里唯一的问题是“计算...”永远不会出现。对此有何提示?


感谢您的提示。我现在已将表单更改为

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

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

我想更改 flash.message 而不是警报行,但到目前为止我还没有发现任何有用的东西。 谁能给我一个提示?

【问题讨论】:

  • 您是否考虑过在第一次单击后禁用按钮以防止双击?
  • 这将是一个很好的解决方法,但我仍然想按照我上面描述的方式解决它
  • 似乎 Ajax 请求可以为您解决问题,但是没有可用的 flash 消息...

标签: flash grails view controller message


【解决方案1】:

您对请求/响应周期的工作方式存在根本性的误解。基于此:

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

是什么让您认为“计算”会再次出现在视图中?它不会。您将不得不对您的问题应用一些 JavaScript。

您可以按照 JoshDM 的说明禁用该按钮,或使用 JavaScript 显示一条消息,告诉用户等待。这两者都需要在提交按钮的点击事件中发生。

这里也有一个 Ajax 解决方案,但鉴于您目前的理解,我担心这会使您此时的事情变得复杂。

【讨论】:

  • 我还建议使用 Ajax,我同意这会使线程所有者的事情变得复杂,但另一方面:什么时候比现在学习 Ajax 更好? :)
猜你喜欢
  • 1970-01-01
  • 2017-02-07
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 2023-03-23
  • 2012-08-14
相关资源
最近更新 更多