论坛首页 Java企业应用论坛

jsf如何防止刷新重复提交

浏览 13855 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-12-15  
看了sun论坛上的帖子,相关问题都没有解决方案,晕啊。
试着用struts的解决方案,如果是重复提交有调用bean里面的action方法,则可以使用struts的解决方案,但jsf的生命周期的原理,造成有时候重复提交不会调用manager bean的action方法,就直接render,所以struts的方法没有办法使用。
   发表时间:2005-12-15  
我工作中解决刷新问题是用struts的令牌机制,具体后台就不说了,相信也都会用,有时我在同一页操作时会出现没有执行后台要完成的功能而直接跳了回来(由于令牌引起的),这样在页面操作时这个功能按钮每点一次,就重新取一下token,偶经验尚浅,不知道下面的符不符合你的情况。

引用
<%@ page import="org.apache.struts.Globals"%>

在按钮的脚本中
<%
    String sess = (String)session.getAttribute(Globals.TRANSACTION_TOKEN_KEY);
    %>
var para = '<%=sess%>';
obj.action='<html:rewrite page="/xxxxxx.do?method=xxxxxx&"/>'+'org.apache.struts.taglib.html.TOKEN='+para;
    obj.submit();

其中token参数的名必需是org.apache.struts.taglib.html.TOKEN

如有不正,请见谅,我在处理刷新问题时是这样的
0 请登录后投票
   发表时间:2005-12-15  
在filter里面判断是否刷新,然后直接到一个禁止刷新提示的画面,比较猪的解决方案
0 请登录后投票
   发表时间:2005-12-15  
先把所有的页面都坐在html框架里   这样刷新他不会递交到后台的action
然后用js做掉判断两次submit的判断  第2次以后都让他return 不submit到action

感觉这样是最简单的
不涉及到代码
0 请登录后投票
   发表时间:2005-12-15  
就在filter里面判断是否刷新(也可以在phaseListen的before restore view阶段判断是否刷新),虽然比较猪。
还有一种方法就是,manager bean的scope用session,navigation case使用<redirect/>


楼上的方法应该不行,不知道有没有理解错,如果用右键点选刷新某个页面,frame就没有用了
0 请登录后投票
   发表时间:2005-12-16  
右键选择刷新  就是走地址栏中的地址的
如果用html框架 那个地址是不会变的
正常情况下 是不可能走到新建 修改等action的
顶多走到主页而已
0 请登录后投票
   发表时间:2005-12-16  
如果你用过struts和jsf等框架,且不是使用redirect,那页面的url地址为前一页的url地址
0 请登录后投票
   发表时间:2005-12-18  
使用Frame封装一下页面
与后面的代码是什么没有关系的  这个是HTML自己的功能
我不知道你的Frame是怎么做的
反正我做过的上面的地址是不变的
我朋友做的也是不变的
0 请登录后投票
   发表时间:2005-12-18  
在IE中,一个页面中多个Frame,如果将鼠标点在frame上,按F5刷新,只会刷新那个frame页面

如果,你点击浏览器上边的刷新按钮,则会刷新top页面及其所有的子页面。

如果你的系统分层架构,有的关键功能对用户来说真的需要防止重复提交的话 synchronized (){
       。。。。。。。。。。。。。。。。
}

性能会有一点影响 。
0 请登录后投票
   发表时间:2006-02-02  
曲线救国法
boolean s=true;//第一次访问该页
public void vai(){
  if(s){
     do{....}
     s=false;
   }
}
小程序比较简单。。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics