gpt4 book ai didi

java - 为什么警报框一次又一次出现?

转载 作者:行者123 更新时间:2023-11-28 21:03:57 25 4
gpt4 key购买 nike

成功尝试上传文件后,请求将转发到他的主页,即他上传文件的同一页面。如果上传成功,则在转发请求之前,会设置一个属性,告知“是的,文件已成功上传!”。

执行用户主页中的以下代码,旨在检查是否必须告知用户上传尝试成功。如果用户曾经看到过以警告框形式显示的成功消息,则下次成功上传另一个文件时应该会看到成功消息。但是,在第一次尝试重新加载/刷新页面后,我再次看到警告框,告诉用户上传尝试成功,即使我已从请求列表中删除了该属性。

尝试成功上传文件后向用户显示成功消息的代码段

<script>
window.onload = function() {
<% message = (String)request.getAttribute("SuccessMessage");
AttemptToUploadFile = (Boolean)request.getAttribute("UploadAttempt");
request.removeAttribute("SuccessMessage"); // Remove the attribute so that alert box doesn't pop every time the page is refreshed
if(message != null) {%>
alert("File successfully uploaded !");
<% } %>

}
</script>

为什么即使我删除了特定属性,我还是会一次又一次地看到警告框?

最佳答案

您对 HTTP 的工作原理以及“服务器端”和“客户端”概念存在概念性误解。

每当与特定 HTTP 请求关联的 HTTP 响应完成发送响应正文的工作(在这种特殊情况下,是 JSP 生成的 HTML 源代码)时,请求属性就已经被丢弃/垃圾化。到客户端。

在浏览器中刷新/重新加载页面(并忽略浏览器将重新发送数据的警告!)将导致原始 HTTP 请求数据重新发送到服务器,因此服务器将再次处理整个 HTTP 请求并再次设置请求属性。显式删除该属性并不能解决问题,并且本身没有任何意义。

我不确定功能要求是什么。您想允许最终用户再次重新发送上传的文件吗?为什么不再显示该消息?难道不应该警告最终用户他/她正在尝试再次重新发送文件,而这本来就是错误的吗?在这种情况下,请在 doPost() 方法中添加额外的检查,其中根据磁盘上已存储的文件或 session 范围中的某些映射来验证文件名,并让它忽略请求并抛出一些异常或显示不同的消息。

String filenameOfUploadedFile = getItSomehow();

if (isAlreadyUploaded(filenameOfUploadedFile)) {
request.setAttribute("message", "Error, the file is already uploaded!");
}
else {
// Process.
// ...

request.setAttribute("message", "File upload is successfully processed!");
}

您的 JSP 代码可以简化为:

<script>
<c:if test="${not empty message}">
window.onload = function() {
alert('${message}');
}
</c:if>
</script>

(虽然我个人不同意90年代风格提醒的反馈方式)

关于java - 为什么警报框一次又一次出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10312948/

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