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>
在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>
解决方案 »
- jsp页面,在对数据库操作时所有控件失效。
- 浏览器打印问题
- j2ee中怎么给一个图片文件夹过滤,加水印?
- prepareStatement ()
- 请问装了雅虎助手后要怎样设置才能去掉“粉粹文件”的功能?(比如,点某个文件右键后就可看见“粉粹文件”的功能) 能不能说说具体的操
- 一个奇怪的struts问题
- 在线两小时等待,pop3收取邮件,并设置服务端收取邮件未以读如何设置呢?分数不够可再加!
- 关于JSP隐藏按钮的问题~~在线等~~~完了就接贴~~~很急~~~谢谢
- 关于继承的疑惑
- ZK框架Listbox如何显示数据啊
- Tomcat Project和Dynamic Web Project有什么区别呢?
- 不用eclipse 直接在tomcat中运行web项目?
改为emp
<form id="form1" name="form1" method="post" action="UpdateServlet?action=updateOk"> //这行有问题吗?这行真的有问题,表单提交的时候request里的值就保存不住了,原因是这样的。
Emp emp = util.getEmp(Integer.parseInt(strId));
emp.setId(Integer.parseInt(strId));
util.getEmp(Integer.parseInt(strId))返回的是什么,是不是为空
不知道 UpdateUtil 是干什么用的。
才能用request.getAttribute()获取
Emp emp = util.getEmp(Integer.parseInt(strId));
request.getSession().setAttribute("emp");//加上这句话
然后在updateok里面写这句
Emp emp = (Emp)request.getSession().getAttribute("emp");
你这里出错的原因应该是,跟request的作用域有关,request只在forward跳转的前后有效,你在servlet里面setattribute,在update.jsp里面可以使用getattribute来取,但在updateok里面就不行了,因为过期了。你可以在updat.jsp里面再setattribute一次。