1

サーブレットと jsp を使用して 2 つの Web ページを作成しました。最初のページで、ユーザーは自分の名、姓、携帯電話番号を入力して送信します。次に、ユーザーが入力した詳細を表示する次のページにリダイレクトしました。ユーザーが同じページ (2 ページ目) で値を編集できるように、「編集」ボタンを提供する必要があります。それ、どうやったら出来るの?

4

1 に答える 1

1

これには 2 つの方法があります。2 つの選択肢の最初の部分は同じです。

  • 最初のページでは、フォームを使用してユーザー データを入力できます。

  • フォーム アクションに対応するサーブレットは、次のような処理を行います。

    public void doPost(HttpServletRequest リクエスト、HttpServletResponse レスポンス) {

    // パラメータを取得

    文字列名 = request.getParameters("名前"); String surname = request.getParameters("surname"); ...

    // 受け取ったパラメーターを検証します ...

    // ユーザーオブジェクトを作成 User user = new User(name, username);

    // HttpSession に格納する

    request.getSession(true).setAttribute("ユーザー", ユーザー);

    // RequestDispatcher を表示するために転送します。 dispatcher = request.getRequestDispatcher("対象リソースはシナリオによって異なります。以下を参照してください");

    dispatcher.forward(リクエスト、レスポンス);

    }

完全なフローを実行する 2 つの方法の違いは、2 番目の JSP にあります。基本的

1) 2 番目の JSP はありません。サーブレットは、フォームを含む JSP に再び転送します。この場合の違いは、空白のフォームの代わりに、以前に送信されたテキスト フィールドの値が表示されることです。セッションで「ユーザー」オブジェクトが見つかった場合にこれらの値を表示するには、最初の jsp を少し変更する必要があることに注意してください。また、ご覧のとおり、この場合、ユーザーがテキストフィールドを直接変更できるため、「編集」ボタンは厳密には必要ありません。とにかく、「ユーザー」インスタンスがセッション中の場合 (つまり、ユーザーが既にデータを挿入している場合)、それらのテキストフィールドを無効に表示し、編集ボタンを使用してそれらを有効にして変更を許可することができます (単純な JavaScript を使用)。

2) 2 番目の jsp にはフォームが含まれておらず、ラベルのみが含まれているため、ユーザーが挿入した内容の「読み取り専用」ビューです。この場合、サーブレットは 2 番目の jsp に転送します。「編集」ボタンは、単純に最初の jsp にリダイレクトできます。この場合も、このページ (最初の jsp) を前述と同じように変更する必要があります。だから基本的に

  • 初めて insertUserData.jsp にアクセスしたとき、セッションにユーザー インスタンスがありません。jsp は空のテキスト フィールドを表示します。
  • ユーザーがデータを入力して送信
  • サーブレットはユーザー オブジェクトを作成し、それをセッションに保存します。次に、2 番目の jsp にリダイレクトします
  • 入力したデータの読み取り専用ビューが表示されます。ユーザーが編集ボタンをクリックします。
  • insertUserData.jsp が表示されますが、ユーザー オブジェクトがセッション中であるため、テキスト フィールドには以前に入力されたデータが入力されます。

最後のメモとして、両方のアプローチに有効です。セッションを使用すると、検証エラーの場合に入力されたデータで最初の jsp を再表示でき、ユーザーがすべての情報を再入力する必要がなくなります (これは非常に面倒です)。

于 2013-07-17T05:19:39.720 に答える