【问题标题】:How do I conditionally call an alert() in JavaScript based on conditions from my Java code?如何根据我的 Java 代码中的条件有条件地在 JavaScript 中调用 alert()?
【发布时间】:2021-04-05 20:30:02
【问题描述】:

如果记录的数据(通过网页上的表格)达到或超过设定的目标(已记录和存储),我正在尝试显示警报(“恭喜!”消息);我也在考虑可能有条件地播放一个可爱的小声音来配合它,但我当然想让弹出窗口工作。我对 JavaScript 很陌生,所以我希望这个问题不是我的愚蠢疏忽。我确实在网上进行了一些挖掘,但找不到完全适合我在这里尝试做的解决方案。

因此,在我的 Java 代码中,我检查记录的数据是否满足或超过目标,如果满足,则将 Goal 对象中的布尔变量设置为 true(以反映目标已完成)。该布尔变量正在正确更新。但是,在我的网页中,当包裹在我所拥有的条件下时,我无法弹出警报。

我知道下面这行 Java 代码会被看到,因为我在它之前和之后都放了一个 print 语句,并且两者都在打印。

这里是相关的Java代码:

model.addAttribute("goalMet", true);

这里是相关的 HTML 和 JS(我使用的是 Thymeleaf):

<div th:if="${goalMet}">
<p> abc123 </p>
<script th:inline="javascript">
    function congratulate() {
      alert("Congratulations on achieving your Goal!");
    }
    congratulate()
</script>
</div>

abc123 刚刚被扔进去调试,目前记录数据达到目标后不显示。我已经尝试了脚本标签的一些变体,无论有没有 th:inline="javascript" 部分。我还尝试将函数定义移动到 html 头标签中,并在这个条件块中调用 congratulate()。到目前为止,我所有的尝试都没有成功。

记录满足目标的数据后,我看到的唯一效果是 URL 附加了“?goalMet=true”。

【问题讨论】:

  • 如果将"${goalMet}" 替换为"${true}" 会发生什么?
  • 一导航到页面就弹出警报,页面上出现“abc123”。
  • 在这种情况下,我想您意识到问题与您的 Java 类成员和 Thymeleaf 的使用有关。 Thymeleaf 将 goalMet 中存储的任何内容解释为错误。
  • "Goal 对象设置为 true(以反映 Goal 已完成)。该布尔变量正在正确更新。"
  • 我已将您要求的代码添加到 OP;我希望这会有所帮助。我对使用 "model.addAttribute("name", value)" 的理解是,我可以给它一个指定的值(通过第二个参数)和一个在 html 文件中引用它的名称;这个对吗? “goalMet”并不打算与其他任何东西联系起来。此外,我在我的想法中添加了我目前认为可能导致 OP 底部问题的原因。

标签: javascript java spring-boot thymeleaf alert


【解决方案1】:

感谢 Randy Casburn 的建议,我能够使用重定向属性来完成这项工作。这是我所做的:

改变

model.addAttribute("goalMet", true);

redirectAttrs.addFlashAttribute("goalMet", true);

我加了

“RedirectAttributes redirectAttrs”作为重定向方法的参数。

【讨论】:

    猜你喜欢
    • 2014-10-04
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多