【发布时间】: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="#">×</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