我会尽力解释。
我有一个doPost,它返回特定部门的所有员工。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = null;
Connection conn = null;
Statement stmt = null;
ResultSet res = null;
String department = request.getParameter("department");
try
{
response.setContentType("text/html");
out = response.getWriter();
out.println("<BODY>");
out.println("<TABLE BORDER=1>");
out.println("<TR>");
out.println("<TD>Id</TD>");
out.println("<TD>Name</TD>");
conn = ConnectionManager.getConnection();
stmt = conn.createStatement();
res = stmt.executeQuery("select * from employees where department ='" + request.getParameter("department") + "'");
if(department.isEmpty())
{
String message = "Employee Name Invalid";
request.setAttribute("message", message);
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/test.jsp");
dispatcher.forward(request, response);
}
if (department.matches(department))
{
while(res.next())
{
out.println("<TR>");
out.println("<TD>" + res.getString(1) + "</TD>");
out.println("<TD><a href='employeeDetail.jsp'>"+ res.getString(3) + " " + res.getString(2) +"</a></TD>");
HttpSession session = request.getSession();
session.setAttribute("name", res.getString(3));
session.setAttribute("lname", res.getString(2));
session.setAttribute("id", res.getString(1));
session.setAttribute("dob", res.getString(6));
session.setAttribute("address", res.getString(8));
session.setAttribute("city", res.getString(9));
session.setAttribute("state", res.getString(10));
session.setAttribute("zip", res.getString(11));
session.setAttribute("phone", res.getString(13));
session.setAttribute("hd", res.getString(7));
session.setAttribute("ext", res.getString(14));
session.setAttribute("dept", res.getString(18));
session.setAttribute("notes", res.getString(16));
}
}
out.println("</TABLE>");
out.println("</BODY>");
}
catch (Exception e)
{
throw new ServletException(e.toString());
}
选择销售部门后,结果为:
Id名称
1 Nancy D ..... 2 Andrew F ..... 3 Janet L .....
每个名称都超链接到employeeDetail.jsp。出于某种原因,它没有显示在上面的列表中。
当我点击任何一个链接(南希,安德鲁,珍妮特)时,我只得到最后一个元素(珍妮特)的结果。
我的问题是如何获取我点击的员工的具体详情?
我试过这个,但我不认为我正确地问这个问题。
此外,我可以非常感谢任何关于我可以在我的servlet上进行更改的指针。
感谢。
答案 0 :(得分:1)
你的循环在这里:
while(res.next()) {
...
}
不断将客户端的会话状态更新为下一个结果。您需要客户端提供某种形式的信息(可能是员工的ID),以确定应将哪一部分员工信息实际保存到客户端的会话状态。
关于更改servlet的建议,我会说你应该完全不再使用会话状态来实现这个目的。例如,类似于:
/departmentServlet?department={DEPARTMENT_ID}
=> returns a list of employees (without saving anything to the session state)
=> each link should be of the form "/employeeDetails?id={CURRENT_EMPLOYEE_ID}"
/employeeDetails?id={EMPLOYEE_ID}
=> calls the SQL again but only for the provided employee ID
=> returns whatever information required by the client for the given employee
答案 1 :(得分:1)
employeeDetail.jsp中的select查询的条件是什么? 此代码创建的链接不包含所选员工的任何信息(例如db id)。 我认为您使用保存的会话信息,但此代码会在每个周期中覆盖会话 - 这就是会话将包含最后一名员工的信息的原因。