从结果集中选择(单击不是SQL选择)特定结果

时间:2013-01-16 20:34:22

标签: java jsp servlets

我会尽力解释。

我有一个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上进行更改的指针。

感谢。

2 个答案:

答案 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)。 我认为您使用保存的会话信息,但此代码会在每个周期中覆盖会话 - 这就是会话将包含最后一名员工的信息的原因。