我觉得通过javascript是可以解决的不过给你个简单的办法你看行不行在session中存一个令牌,按钮是否是激活状态与这个令牌有关,
执行存储过程前 令牌置0执行完成后令牌置1
按钮只有在令牌为1或null时显示或可用,当然你还可以显示些用好信息

解决方案 »

  1.   

    你们做的是数据统计分析之类的东西吧?
    让一个用户等20分钟是难以忍受的事情,2分钟几乎已经是耐心的极限了。个人感觉你们项目的设计观点不太好,
    做数据分析的时候,不要直接去对原始的数据表(可能海量)做复杂查询,
    而是使用“批处理+临时表”的方式去做。举个例子说,明天白天要用的报表所需的数据,在今天晚上或深夜(DBMS空闲时),
    通过定时任务自动调用后台的批处理程序,将处理结果写入临时表,
    明天白天用的时候直接对临时表做简单查询就OK了,没必要再访问原始表。
    (采用这样的方案一般来说临时表查询耗时都是秒级甚至毫秒级的事情了)第二天晚上要用新的数据做统计分析的时候,让批处理首先删除前日数据
    (看业务需要也可以不删),再执行上一段提到的处理。想想你们的现状:
    一个人执行一次就是20分钟,100个人呢?2000分钟?嗷买嘎特
      

  2.   

    非要像你现在那么做的话也不是不行。你可以在用户按下按钮之后创建一个和浏览器工作区等大的半透明的DIV,
    将它放到Z轴上的顶层位置,言下之意是将整个浏览器窗口工作区盖住,
    不让用户做操作,管他什么frame不frame的,通通盖住不让操作。但是同时要记得在遮盖层之上再画一个等待提示对话框的层,
    让用户知道你不让他动的原因。还有,要把浏览器的回退键禁用掉。最后补充:struts提供的token机制是不完善的,
    对于“通过当前窗口打开新窗口”这种有意无意的捣乱行为是无能为力的。
    (此时两个或多个窗口共享一个session)要想完全避免,要么继承并改写struts的token功能,
    要么自己设计一套token机制。。
      

  3.   

    wingtrace   非常感谢,您给了我一个思想上的转变,呵呵。
    我在java web 上也发了这个帖子 你去回一下吧,我给你分数,那里开了100分另外:一个补充就是,我这个存储过程是   一个月才用一次,
    用于做月末报表的,
    就是在操作人员做完月结之后才执行这个功能,所以你说的在深夜的时候
    来当作作业来执行的这个思想并不能完全的响应