最近做了下SSH的简单例子, 发现一个以前没有注意的问题, 就是主页面有很多行数据, 每行后面有删除操作, 我是通过A标
签将 ID 传递到后台然后从数据库中删除该行数据,然后再调用doList()回到主页面, 这时页面数据确实已经删除,数据库中的数据也已经删除,不过当我F5刷新页面时会出现以下错误信息 javax.servlet.ServletException: java.lang.IllegalArgumentException: attempt to create delete event with null entity
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
  
如果不刷新则无事, 请问下 这样的情况该如何解决

解决方案 »

  1.   

    通过A标签将ID传递到后台 是什么意思?不会是每次都要执行的吧????你每刷新一次就相当于重新提交一次请求,你要是没给他指定id,他从哪来的实体??当然会错
      

  2.   

    是的, 应该如你所说,是重新提交了一次请求, 但是怎么避免这个情况呢? 
    我的是<a herf="url?doDelete&id=${bean.id}"></a>
      

  3.   

    这是应为你刷新的时候,又提交了表单,要想避免这种情况,可以用struts的 令牌机制(Token)
    或者是通过ajax实现
      

  4.   

    正常的删除操作是不会出现这种情况的。你这种情况像是你把URL写死了。
      

  5.   

    你用redirect重定向吧。就不会了。
      

  6.   

    删除后你调用下list方法··这样刷新会执行list了!
      

  7.   

    刷新的时候肯定重新触发了删除操作,单步你的Action,看前台传过来的请求是什么