0

説明するために最善を尽くします。

特定の部門のすべての従業員を返す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ナンシーD.....2アンドリューF.....3ジャネットL....。

各名前はemployeeDetail.jspにハイパーリンクされています。何らかの理由で、上記のリストには表示されません。

リンク(ナンシー、アンドリュー、ジャネット)のいずれかをクリックすると、最後の要素(ジャネット)の結果のみが表示されます。

私の質問は、クリックした従業員の具体的な詳細をどのように取得できるかということです。

私はこれを調べてみましたが、私は正しく質問しているとは思いません。

また、サーブレットに加えることができる変更についてのポインタをいただければ幸いです。

ありがとう。

4

2 に答える 2

1

ここであなたのループ:

while(res.next()) {
  ...
}

クライアントのセッション状態を次の結果に継続的に更新しています。クライアントは、クライアントのセッション状態に実際に保存する必要がある従業員情報のビットを決定するために、何らかの形式の情報(おそらく従業員のID)を提供する必要があります。

サーブレットを変更するための提案に関しては、この使用のためにセッション状態を完全に使用することから離れるべきだと思います。たとえば、次のようなものです。

/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
于 2013-01-16T21:09:37.747 に答える
1

employeeDetail.jsp の select クエリの条件は何ですか? このコードが作成するリンクには、選択した従業員からの情報 (データベース ID など) は含まれません。保存されたセッション情報を使用していると思いますが、このコードは for サイクルごとにセッションを上書きします。そのため、セッションには最後の従業員の情報が含まれます。

于 2013-01-16T21:10:23.177 に答える