0

UPDATE サーブレットに少し問題があります。

私は自分のデータベースを更新しようとしていますが、それは起こっていません。Java EE のこの章は初めてです。

**注: UpdateServlet で問題が発生しました。変更されたデータを JSP から取得して DAO に送信し、DB を更新する方法がわからないためです。残りはOKです

目的:ユーザーが「更新」ボタンを押すと(下のスクリーンショット)...

ここに画像の説明を入力

... JSP はリクエストを「ユーザーの更新」ページ (以下) に転送し、そこでユーザーは電子メールに添付された姓名 (主キー) を変更できます (下のスクリーンショット)...

ここに画像の説明を入力

私の質問は、セッションから User オブジェクトを取得し、データベースを新しい姓名で更新するUpdateUserServlet (以下のコードを参照) コードを実装する方法です。

ユーザー一覧を表示するJSP

<body>

<h1>Users List</h1>

<table cellpadding="5" border=1>

  <tr valign="bottom">
    <th>First Name</th>
    <th>Last Name</th>
    <th>Email Address</th>
  </tr>

  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  <c:forEach var="user" items="${users}">
  <tr valign="top">
    <td><p>${user.firstName}</td>
    <td><p>${user.lastName}</td>
    <td><p>${user.emailAddress}</td>
    <td><a href="displayUser?emailAddress=${user.emailAddress}">Update</a></td>
    <td><a href="deleteUser?emailAddress=${user.emailAddress}">Delete</a></td>
  </tr>
  </c:forEach>

</table>

</body>

「更新ボタン」を押すと、以下の JSP が引き継ぎます。

....

<body>

<h1>Update User</h1>

<form action="updateUser" method="post">
<table cellspacing="5" border="0">
    <tr>
        <td align="right">First name:</td>
        <td><input type="text" name="firstName" 
                value="${user.firstName}">
        </td>
    </tr>
    <tr>
        <td align="right">Last name:</td>
        <td><input type="text" name="lastName" 
                value="${user.lastName}">
        </td>
    </tr>
    <tr>
        <td align="right">Email address:</td>

        <td>${user.emailAddress}</td>
    </tr>
    <tr>
        <td></td>
        <td><input type="button" value="Submit"></td>
    </tr>
</table>
</form>

</body> ....

更新サーブレット。これについては助けが必要です。

package user;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import business.User;
import data.UserDB;

public class UpdateUserServlet extends HttpServlet
{

    protected void doPost(HttpServletRequest request, 
            HttpServletResponse response) 
            throws ServletException, IOException
    {
        String firstName = request.getParameter("firstName");
        String lastName = request.getParameter("lastName");
        String emailAddress = request.getParameter("emailAddress");

        User user = new User();



        HttpSession session = request.getSession();
        session.setAttribute("user", user);

        user.setFirstName(firstName);
        user.setLastName(lastName);
        user.setEmailAddress(emailAddress);

        UserDB.update(user);


        // TODO: add code that gets the User object from the session and updates the database

        String url = "/displayUsers";
        RequestDispatcher dispatcher =
              getServletContext().getRequestDispatcher(url);
        dispatcher.forward(request, response);
    }
}

ダオ

package data;

import java.sql.*;
import java.util.ArrayList;

import business.User;

public class UserDB

{

    public static int update(User user) {
        ConnectionPool pool = ConnectionPool.getInstance();
        Connection connection = pool.getConnection();
        PreparedStatement ps = null;

        String query = "UPDATE User SET " + "FirstName = ?, " + "LastName = ? "
                + "WHERE EmailAddress = ?";
        try {
            ps = connection.prepareStatement(query);
            ps.setString(1, user.getFirstName());
            ps.setString(2, user.getLastName());
            ps.setString(3, user.getEmailAddress());

            return ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
            return 0;
        } finally {
            DBUtil.closePreparedStatement(ps);
            pool.freeConnection(connection);
        }
    }

}
4

2 に答える 2

1

update(User user)メソッドにログを追加してみてください。制御がこの場所に来るかどうかを確認してください。

于 2013-07-12T11:59:31.660 に答える