jsp如何实现postback

dust_dust 2013-11-14 06:37:53
项目的user网络条件比较恶劣,经常会出现等待页面回发情况,此时要是user多次点击处于回发状态的Button,势必带来一些问题,特别是与数据库交互的时候。为此,找了些资料,写了些简单的方法来避免这些问题。

具体的情况是,实现点击1个Button,立刻disable该button,不让user点击第2次,等Button服务端处理好之后,再将Button变为可用。在用户网络条件恶劣情况下,阻止多次Request向服务端传送重复数据。

一. 在不引用AJAX的情况下,需要手动调用Button的postback。详情在http://blog.csdn.net/aboutblog/archive/2006/09/27/1293926.aspx 和 http://www.cnblogs.com/jackhuclan/archive/2008/08/05/1261027.html 里。里面有关于PostBack的机制和如何注册服务端控件的postback。

-----------------------我是分割线-------------------------------
上面是在http://www.cnblogs.com/sothicor/articles/1288484.html看到的。我查到postback是asp.net的,我想问jsp里面怎么实现这个功能。
页面上有一列单选按钮,我选中一个,点提交按钮,生成一个pdf文件,然后在等文件生成的过程中该按钮变灰,这个用disabled=true就行了,但是如何在生成pdf文件后将按钮变成亮的。因为这个生成pdf的貌似是个异步的。
...全文
325 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
teemai 2013-11-20
  • 打赏
  • 举报
回复
ajax看下吧,要有回调函数,你这样的场景ajax是最适合你的。
teemai 2013-11-20
  • 打赏
  • 举报
回复
引用 9 楼 shaode0101 的回复:
[quote=引用 5 楼 huxiweng 的回复:] 我去这代码和字体编辑器混合使用有问题啊! $.ajax({ type: "POST", url:"/CPS/loginAction.do", data:encodeURI($('#loginForm').serialize()), dataType:"json", async: false, error: function(request) { alert("由于网络原因请求失败"); }, success: function(data) { if(data.loginState == "failed"){ alert("用户名或密码不正确,登陆失败"); }else{ window.location.replace("index.jsp"); } } });
版主好,能看下这个链接么?http://www.cnblogs.com/sharpxiajun/archive/2012/04/26/2471990.html 里面说“asyn:false,这个参数我设置过,效果一样的,应该说XMLHttpRequest是重新开启了个http连接,我们的ajax函数只是封装请求信息,并且调用它,因为是内部独立的http链接,XMLHttpRequest是独立运行的,和原来的ajax函数无关” 我自己还没熟悉ajax怎么写,所以现在还不能改写我的代码成ajax。[/quote] 博客乱扯吧?那个参数就是锁定浏览器不让操作的! 还是看官方的解释: async (default: true) Type: Boolean By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active. As of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated; you must use the success/error/complete callback options instead of the corresponding methods of the jqXHR object such as jqXHR.done() or the deprecated jqXHR.success(). http://api.jquery.com/jQuery.ajax/
  • 打赏
  • 举报
回复
引用 8 楼 shaode0101 的回复:
引用 6 楼 ghsau 的回复:
[quote=引用 2 楼 shaode0101 的回复:] [quote=引用 1 楼 ghsau 的回复:] 用ajax请求,请求成功后,回调函数里将disabled=false。
太虚了,能多说点儿不?请求的是io打印,我要求的是那个pdf文件生成后才将disabled=false
生成pdf是异步的?也就是另有一个线程是生成pdf文件的?而请求已经返回了?[/quote]应该是这样的,我本来是在调用后面加了disabled=false,点击按钮后,那个按钮灰了,然后又亮了,但pdf还没生成,再然后pdf生成了。这是在某台机子上,在我的笔记本上就很快生成了pdf。所以在延迟的情况下,可以看出是异步的。[/quote] 你没误导我吧,你像版主说的试了ajax请求了吗?
dust_dust 2013-11-20
  • 打赏
  • 举报
回复
引用 5 楼 huxiweng 的回复:
我去这代码和字体编辑器混合使用有问题啊! $.ajax({ type: "POST", url:"/CPS/loginAction.do", data:encodeURI($('#loginForm').serialize()), dataType:"json", async: false, error: function(request) { alert("由于网络原因请求失败"); }, success: function(data) { if(data.loginState == "failed"){ alert("用户名或密码不正确,登陆失败"); }else{ window.location.replace("index.jsp"); } } });
版主好,能看下这个链接么?http://www.cnblogs.com/sharpxiajun/archive/2012/04/26/2471990.html 里面说“asyn:false,这个参数我设置过,效果一样的,应该说XMLHttpRequest是重新开启了个http连接,我们的ajax函数只是封装请求信息,并且调用它,因为是内部独立的http链接,XMLHttpRequest是独立运行的,和原来的ajax函数无关” 我自己还没熟悉ajax怎么写,所以现在还不能改写我的代码成ajax。
dust_dust 2013-11-20
  • 打赏
  • 举报
回复
引用 6 楼 ghsau 的回复:
引用 2 楼 shaode0101 的回复:
[quote=引用 1 楼 ghsau 的回复:] 用ajax请求,请求成功后,回调函数里将disabled=false。
太虚了,能多说点儿不?请求的是io打印,我要求的是那个pdf文件生成后才将disabled=false
生成pdf是异步的?也就是另有一个线程是生成pdf文件的?而请求已经返回了?[/quote]应该是这样的,我本来是在调用后面加了disabled=false,点击按钮后,那个按钮灰了,然后又亮了,但pdf还没生成,再然后pdf生成了。这是在某台机子上,在我的笔记本上就很快生成了pdf。所以在延迟的情况下,可以看出是异步的。
dust_dust 2013-11-20
  • 打赏
  • 举报
回复
引用 1 楼 ghsau 的回复:
用ajax请求,请求成功后,回调函数里将disabled=false。
而且,我感觉请求成功后是开始生成pdf文件,我是想让这个pdf生成后再disabled=false。
  • 打赏
  • 举报
回复
引用 2 楼 shaode0101 的回复:
引用 1 楼 ghsau 的回复:
用ajax请求,请求成功后,回调函数里将disabled=false。
太虚了,能多说点儿不?请求的是io打印,我要求的是那个pdf文件生成后才将disabled=false
生成pdf是异步的?也就是另有一个线程是生成pdf文件的?而请求已经返回了?
teemai 2013-11-20
  • 打赏
  • 举报
回复
我去这代码和字体编辑器混合使用有问题啊! $.ajax({ type: "POST", url:"/CPS/loginAction.do", data:encodeURI($('#loginForm').serialize()), dataType:"json", async: false, error: function(request) { alert("由于网络原因请求失败"); }, success: function(data) { if(data.loginState == "failed"){ alert("用户名或密码不正确,登陆失败"); }else{ window.location.replace("index.jsp"); } } });
teemai 2013-11-20
  • 打赏
  • 举报
回复
$.ajax({ type: "POST", url:"/CPS/loginAction.do", data:encodeURI($('#loginForm').serialize()), dataType:"json", <span style="color: #FF0000;">async: false,</span> error: function(request) { alert("由于网络原因请求失败"); }, success: function(data) { if(data.loginState == "failed"){ alert("用户名或密码不正确,登陆失败"); }else{ window.location.replace("index.jsp"); } } });
teemai 2013-11-20
  • 打赏
  • 举报
回复
ajax请求如果是你的场景的话直接将ajax的异步设置成false。这样在后台没有结束之前,页面上所有的都点不了!

$.ajax({
                        type: "POST",
                        url:"/CPS/loginAction.do",
                        data:encodeURI($('#loginForm').serialize()),
                        dataType:"json",
                        async: false,
                 error: function(request) {
                 alert("由于网络原因请求失败");
                 },
                 success: function(data) {
                         if(data.loginState == "failed"){
                                 alert("用户名或密码不正确,登陆失败");
                         }else{
                                 window.location.replace("index.jsp");
                         }
                                
                 }
                });
dust_dust 2013-11-20
  • 打赏
  • 举报
回复
引用 1 楼 ghsau 的回复:
用ajax请求,请求成功后,回调函数里将disabled=false。
太虚了,能多说点儿不?请求的是io打印,我要求的是那个pdf文件生成后才将disabled=false
  • 打赏
  • 举报
回复
用ajax请求,请求成功后,回调函数里将disabled=false。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧