我有两个jsp页面和一个servlet。当用户单击提交按钮时,处理在servlet中完成,然后结果转到另一个jsp页面,以便用户看到他的结果。但我想显示一个加载gif,以便gif将运行直到用户获得他的结果,如果在中期用户停止浏览器加载然后自动gif也将停止,如何做?在javascript或其他只有用户会看到gif图片,但当用户将停止浏览器的处理仍然是gif正在运行,这不应该发生。我怎么解决这个问题?
index.jsp ---------------转到servlet ------------ result.jsp
答案 0 :(得分:2)
由于所有这些都将在用户的浏览器中发生,因此解决方案不能使用Java,它必须是JavaScript,才能对onabort
事件做出反应。
至于停止GIF动画,这是不可能的(除了nasty hacks之外)。我建议使用JavaScript(例如jQuery builtins或plugins)来制作动画。
更新:第二个想法,为什么你认为你需要做任何事情?如果浏览器没有加载,那就是他们自己的错,浏览器已经有了一个完全符合你想要的加载动画。为什么重复这个?
答案 1 :(得分:1)
这不是Java特有的,因为一切都将在浏览器中发生。在发出请求之前,您可能需要一些JavaScript来打开该弹出窗口,并注册一个关闭window.onabort
弹出窗口的事件处理程序。
答案 2 :(得分:1)
试试这个
function doWork() {
//start loading gif
$.ajax({
'type': 'POST',
'cache': false,
'contentType': 'application/x-www-form-urlencoded; charset=UTF-8',
'url': #your_servlet_url#,
'data': $('form#' + #your_form_id#).serialize(),
success: function (data) {//data can be json or plain HTML depending on your scenario
// stop the loading gif
//redirect to result.jsp if you need to redirect user to completely new page with 'data' received
// or just send the result.jsp with processed data from the servlet and load the content 'data'
// received above in some div on index.jsp
},
error: function (xhr, status, err) {
//request cancelled by user or due to any other reason such timeout
if (xhr.status == 0) {
//stop the loading gif
}
// you can handle other errors(401,403 etc) too by examining xhr, status and err objects
}
});
}
答案 3 :(得分:1)
我能想到的两件事:
在提交时只显示gif。我检查过的所有浏览器都不会更改当前页面,直到收到第二个结果。
使用ajax(jQuery)来显示结果。然后,您可以使用ajax activity indicator
答案 4 :(得分:0)
jQuery JavaScript库可能会提供一些不错的进展效果。 对于未来:HTML5有一个进度条等。 使用Ajax可能会导致(在DIV中加载时回调)。
答案 5 :(得分:0)
一个非常粗略的解决方案是使用ajax来提交表单。您可以在提交时显示加载GIF,并在收到响应后立即更新页面并删除gif。 Jquery ajax方法将能够处理用户的中止,这将使您能够编写逻辑以删除gif(例如,在中止的情况下在页面上进行任何其他处理)
其他可能性是你使用像struts(2.0)这样的框架。这给出了一个等待和执行拦截器,特别是为了这种目的(在处理请求时显示中间页面)