gpt4 book ai didi

flash - 执行时grails在 View 中显示Flash消息

转载 作者:行者123 更新时间:2023-12-02 14:25:37 30 4
gpt4 key购买 nike

在我看来,我有一个关于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>

在 View 的某个时刻,我在 Controller 中调用了一个 Action :
<g:form action="doAction">
<g:submitButton class="ghbtn" name="doAction" />
</g:form>

Controller 操作类似于:
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()需要花费几秒钟的时间来执行,因此我想通知用户系统已接收到请求并正在处理该请求,否则用户可能无法正常工作并再次单击该按钮。

我添加了另一条闪存消息“Computing ...”,单击 doAction后应立即显示该消息,直到执行Web服务为止。

工作流程应如下所示:

点击 doAction->显示“正在计算...”
webserviceService.compute()已执行->“正在计算...”由“已计算”或“无法计算”替换

这里唯一的问题是“计算...”从不出现。有什么提示吗?

谢谢你的提示。我现在将表格更改为
<g:form action="calculate" onsubmit="return calculating()">


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

而不是警报行,我想更改flash.message,但是Sofar我还没有找到任何有用的方法。
有人可以给我一个提示吗?

最佳答案

您对请求/响应周期的工作原理有基本的误解。基于此:

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

是什么让您认为“计算”将永远返回 View ?不会的您将必须对问题应用一些JavaScript。

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

这里也有一个Ajax解决方案,但是鉴于您当前的了解,我担心这一次只会使您的事情复杂化。

关于flash - 执行时grails在 View 中显示Flash消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14712553/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com