【发布时间】: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