日期:2014-05-17  浏览次数:20667 次

struts token 重复提交
在一个action中具有三个方法:
Java code

selectall(request,response,form,mapping)(转向的页面为a.jsp,分两部分:1.具有提交功能,可以设置表单。2.用来列出已经设好的信息。),delete(request,response,form,mapping)(在a.jsp页面的列表选项删除功能提交后进行删除操作);add(request,response,form,mapping)(添加功能)


用户登录后,先调用selectall方法进入a.jsp,我在selectall方法中设置了savetoken():
Java code

try {    
         allRecorders = crmDao.getCombototal(org);
     all = crmDao.getAllCombo(currentPage, lineSize, org);
    } catch (Exception e) {
    e.printStackTrace();
    }
    saveToken(request);


在delete方法中加入:
Java code

if(!isTokenValid(request)){
    saveToken(request);
    request.setAttribute("errormessage", "套餐已经删除,不能重复删除!");
    return mapping.findForward("taocanexit");
  }else{
    crmDao.deleteTaocan(tcid);
    resetToken(request);
    return selectall(mapping, form, request, response);
    }


可是这样后,当我一点击删除它就会提示:套餐已经删除,不能重复删除。是不是我设的token错误?我看别的例子都是先有一个prepareaction中设置savetoken,可是这样每个都加一个prepareaction的话,太浪费了。

------解决方案--------------------
探讨
引用:
a.jsp中应该提供一个表单,它会在表单中写入一个隐藏值,保存令牌值

a.jsp有表单。这个隐藏值是不是自动写入的?

------解决方案--------------------
HTML code

    function doDel(tcid){
        if( confirm("确认删除吗?")){
            document.forms[0].method.value = "delete";
            document.forms[0].tcid.value = tcid;
            document.forms[0].action = "/comboinit.do";
            document.forms[0].submit();
        }
    }