点击显示页面里的“删除”时根据页面传进来的参数去删除数据库对应的数据的 
错误如下:  
javax.servlet.ServletException: java.lang.IllegalArgumentException: id to load is required for loading  
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)  
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)  
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)  
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)  
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)  
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)  
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)  
bug.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:89)  
root cause   java.lang.IllegalArgumentException: id to load is required for loading  
org.hibernate.event.LoadEvent.  <init>(LoadEvent.java:51)  
org.hibernate.event.LoadEvent.  <init>(LoadEvent.java:33)  
org.hibernate.impl.SessionImpl.load(SessionImpl.java:778)  
org.hibernate.impl.SessionImpl.load(SessionImpl.java:774)  
bug.dao.imp.BugDAOImp.deleteBugByID(BugDAOImp.java:39)  
bug.web.struts.action.DeleteBug.execute(DeleteBug.java:50)  
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)  
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)  
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)  
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)  
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)  
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)  
bug.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter  据说这个是表单里面没有把参数传过来的错误  
我是在一个显示页面里指向一个请求处理的,然后请求处理取得数据库的内容并返回显示页面,处理的部分程序如下:  
public void listpage(HttpServletRequest request, JspWriter out, int page)
            throws Exception {        String id = "", sta = "", pha = "", cat = "";
        bugDao = this.getBugDAO();
        List list = bugDao.getBug();
        if (list == null) {
            out.print("暂无信息");
            return;
            
        }
        int total = list.size();
        int count = 0;
                //取得list迭代器
        Iterator it = list.iterator();
        Bug bug;
        
        while (count < (page - 1) * 10 && it.hasNext()) {
            it.next();
            count++;
        }
        
        count = 0;
        
        while (it.hasNext() && count < 10) {
            bug = (Bug) it.next();            id = bug.getId();
            sta = bug.getSta();
            pha = bug.getPha();
            cat = bug.getCat();
            if (sta == null || sta.equals(""))
                sta = "无";
            if (pha == null || pha.equals(""))
                pha = "无";
            if (cat == null || cat.equals(""))
                cat = "无";            out.print("<tr><td><a href=list.do?id=" + id + ">"+id+"</a></td><td>" + sta + "</td><td>"
                    + pha + "</td><td>" + cat + "</td><td>");
            out.print("<a href=DeleteBug.do?id="
                    + bug.getId() + ">删除</a></td><td>");
            count++;
        }
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
DAO的删除方法如下:  
public boolean deleteBugByID(String id) {
        try {
            Session s = HibernateUtil.currentSession();
            //HibernateUtil.beginTransaction();
            Bug bug=new Bug();
            bug= (Bug) s.load(Bug.class, bug.getId());
            HibernateUtil.commitTransaction();
            
    System.out.println(bug.getId());
            HibernateUtil.beginTransaction();
            s.delete(bug);
            HibernateUtil.commitTransaction();
            HibernateUtil.closeSession();
            return true;
        } catch (HibernateException e) {
            log.fatal(e);
        }        
        return false;
    }~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Action如下: 
public class DeleteBug extends Action {
    private BugDAO bugDao;    public BugDAO getBugDAO() {
        return DAOFactory.getInstance().createBugDAO();
    }    /**
     * Method execute
     * 
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return ActionForward
     */
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {//        ActionMessages errors = new ActionMessages();
        
        String id =request.getParameter("id");
        
        bugDao = this.getBugDAO();
        
        if(!bugDao.deleteBugByID(id)){
            return (mapping.getInputForward());
        }    
        
        return (mapping.findForward("deleteBugSuccess"));
    }}

解决方案 »

  1.   

    你的页面是不是用的html:form标签还是html的form标签两个不太一样
      

  2.   

    public boolean deleteBugByID(String id) {
            try {
                Session s = HibernateUtil.currentSession();
                //HibernateUtil.beginTransaction();
                Bug bug=new Bug();
                bug= (Bug) s.load(Bug.class, bug.getId()这里还有必要怎么取么直接用id);
                HibernateUtil.commitTransaction();
                
        System.out.println(bug.getId()这里也是);
                HibernateUtil.beginTransaction();
                s.delete(bug);
                HibernateUtil.commitTransaction();
                HibernateUtil.closeSession();
                return true;
            } catch (HibernateException e) {
                log.fatal(e);
            }        
            return false;
        }
      

  3.   

    肯定不对了
      Bug bug=new Bug(); //去掉
      bug= (Bug) s.load(Bug.class, bug.getId());改成            bug= (Bug) s.load(Bug.class, id);//根据你的类型 可能是 int ,可能是long 
      

  4.   

    Bug bug=new Bug();
    bug= (Bug) s.load(Bug.class, bug.getId());
    ====================================================
    bug是新new出来的object,接着去getId()的话肯定是没东东了,
    换成id就可以了。
      

  5.   


    如果我的数据类型是String型的呢?
      

  6.   

    不管你是什么类型的啊 这跟类型有什么关系啊
    你现在是要根据主键ID查找记录啊
     Session s = HibernateUtil.currentSession();   
                //HibernateUtil.beginTransaction();   
                //Bug bug=new Bug();这个删掉   
                bug= (Bug) s.load(Bug.class, id);   
                HibernateUtil.commitTransaction();   
    这样就行了 这个方法一定要是根据主键查才行的
      

  7.   

    刚才搞错了Bug bug=new Bug();这个不能删掉  
    Bug bug=new Bug();  
    bug= (Bug) s.load(Bug.class, id);  
    这个的意思就是把主键ID等于id的Bug对象查出来附给一个新的bug对象
      

  8.   

    我改了DAO,然后又出现了新的问题:
    java.lang.NullPointerException
    org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:372)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    bug.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter空指针???传进去的对象没有?大家看清楚我在action里是有这句的:String id =request.getParameter("id");
    可为什么传不进去对象呢?我在这句的上面和下面都作了断点,上面可以打印,下面不行,证明是这句出了问题
    原先的那句是这样的String id =(String)request.getParameter("id");
    但我的id本来就是String所以就去掉了(String),不过加回来也是同样的错误,哎~