学生号在学生表里面是主键,类型是varchar,id生成器是assigned我在程序中想要修改这个学生号,却提示说:java.lang.NullPointerExceptionexception javax.servlet.ServletException: java.lang.NullPointerException
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:516)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:423)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
filter.Encoding.doFilter(Encoding.java:41)
root cause java.lang.NullPointerException
action.EditStuAction.execute(EditStuAction.java:38)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
filter.Encoding.doFilter(Encoding.java:41)

解决方案 »

  1.   

    EditStuAction.java:38java语句贴出来
      

  2.   


    public class EditStuAction extends Action{

    public ActionForward execute(ActionMapping mapping,ActionForm form,
     HttpServletRequest request,HttpServletResponse response){
    EditStuForm editStuForm=(EditStuForm)form;

     String id=editStuForm.getId();
     String name=editStuForm.getName();
     String password=editStuForm.getPassword();
     String jiguan=editStuForm.getJiguan();
     String department=editStuForm.getDepartment();
     String sex=editStuForm.getSex();
     Integer =editStuForm.getMark();
     String tel=editStuForm.getTel();
     String phone=editStuForm.getPhone();
     String email=editStuForm.getEmail();
     
     ManStuDAO manStuDao=new ManStuDAO();
     Student stu;
     stu=manStuDao.getStuById(id);
     stu.setId(id);
     stu.setName(name);
     stu.setPassword(password);
     stu.setDepartment(department);
     stu.setEmail(email);
     stu.setJiguan(jiguan);
     stu.setSex(sex);
     stu.setTel(tel);
     stu.setMark();
     stu.setPhone(phone);

    if(manStuDao.update(stu)){
    if(request.getSession().getAttribute("self")=="1")
        return mapping.findForward("stuEditSuccess");
    else
    return mapping.findForward("editSuccess");
    }else
    return mapping.findForward("error");

    }}
      

  3.   

    mapping为null?根据你贴的代码。
      

  4.   

    另外 request.getSession().getAttribute("self")=="1" 请用equals吧
      

  5.   

    首先你想一下什么样的业务需求下让你去修改主键,既然是要修改就尽量不要设为主键,最后,主键是可以被修改的,至少在oracle下可以但不能与其他主键重复。而你这个异常很明显是空指针嘛。
      

  6.   

    stu=manStuDao.getStuById(id);
    stu.setId(id);stu不必setId 了吧 
      

  7.   

    单存是主键可以改,因为你设定为assigned,不过你好像不但是主键吧,在别的表里也引用了这个键吧,我猜,你在别的表引用这个键,当你改了之后,与你设置的某种数据联系冲突或者找不到,所以空指针异常,希望能帮到你