list.jsp上有若干数据,每条后面都有个修改按钮, 点击修改按钮后 forwad到update.jsp,
在update.jsp上可以修改这条数据,修改完后,点击页面下方的确认按钮进行保存,这时候servlet的保存方法updateOk出错,request.getAttribute("emp");为空, 这个就是想修改的数据,为什么为空? 是不是前后画面不再一个scope里面了,我用的是request.getRequestDispatcher("update.jsp").forward(request, response);跳转的,应该没问题啊。。
附servlet代码:
public void update(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String strId = request.getParameter("id");
UpdateUtil util = new UpdateUtil();
Emp emp = util.getEmp(Integer.parseInt(strId));
emp.setId(Integer.parseInt(strId));
request.setAttribute("emp",emp);//这里设置了attribute 
request.setAttribute("id",Integer.parseInt(strId));
request.getRequestDispatcher("update.jsp").forward(request, response);  //跳转
} public void updateOk(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//todo
Emp emp = (Emp)request.getAttribute("emp"); //此行报错!request.getAttribute("emp");为空
// Emp emp = new Emp();
emp.setName(request.getParameter("nameTextfield"));
emp.setAge(Integer.parseInt(request.getParameter("ageTextfield")));
emp.setDept(request.getParameter("deptTextfield"));
emp.setSex(request.getParameter("ageSelect"));
emp.setPhone(request.getParameter("phoneTextfield"));
emp.setRe(request.getParameter("reTextarea"));
// todo idset
emp.setId(Integer.parseInt(request.getParameter("id")));
UpdateUtil util = new UpdateUtil();
util.updateEmp(emp);
request.setAttribute("message","数据修改成功!");
//todo
request.setAttribute("emp", emp);
request.getRequestDispatcher("update.jsp").forward(request, response);
}update.jsp代码: <form id="form1" name="form1" method="post" action="UpdateServlet?action=updateOk">  //这行有问题吗?
    <br>
  <table width="408" height="330" border="1" align="center" bgcolor="#FFCCCC">
    <tr>
      <td colspan="2"><div align="center">修改制定员工信息</div></td>
    </tr>
    <tr>
      <td width="92"><div align="right">姓名:</div></td>
      <td width="300"><div align="left">
        <label>
        <input type="text" name="nameTextfield" value="<%=emp.getName()%>"/>
        </label>
      </div></td>
    </tr>
。<tr>
      <td><div align="right"></div></td>
      <td><div align="left">
        <label>
        <input name="Submit" type="submit" value="确认修改" />
        </label>
      </div></td>
    </tr>

解决方案 »

  1.   

    <input type="text" name="nameTextfield" value="<%=emp.getName()%>"/>
    改为emp
      

  2.   

    你提交参数时的name,就是你用getParameter()得到参数时的参数名。如果没得到。可以在后台打印输出值看看是否传进去了。
      

  3.   

    request.getAttribute("emp")   emp  应该是 text的name 吧    貌似你的两个不一样
      

  4.   

    楼上的都没看清楚程序哦
    <form id="form1" name="form1" method="post" action="UpdateServlet?action=updateOk"> //这行有问题吗?这行真的有问题,表单提交的时候request里的值就保存不住了,原因是这样的。
      

  5.   

     UpdateUtil util = new UpdateUtil();
    Emp emp = util.getEmp(Integer.parseInt(strId));
    emp.setId(Integer.parseInt(strId)); 

    util.getEmp(Integer.parseInt(strId))返回的是什么,是不是为空
    不知道 UpdateUtil 是干什么用的。
      

  6.   

    先在页面上用隐藏域保存emp的值。再用request.getAttribute("emp");去获取!
      

  7.   

    request.setAttribute();
    才能用request.getAttribute()获取
      

  8.   

    5L正解  页面再提交时就不是原来的 request 了 所以就取不到了
      

  9.   

    UpdateUtil util = new UpdateUtil();
    Emp emp = util.getEmp(Integer.parseInt(strId));
    request.getSession().setAttribute("emp");//加上这句话
    然后在updateok里面写这句
    Emp emp = (Emp)request.getSession().getAttribute("emp");
      

  10.   

    要先谈一下request这个对象,他既是jsp的内置对象,又是jsp的作用域之一。
    你这里出错的原因应该是,跟request的作用域有关,request只在forward跳转的前后有效,你在servlet里面setattribute,在update.jsp里面可以使用getattribute来取,但在updateok里面就不行了,因为过期了。你可以在updat.jsp里面再setattribute一次。