質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.61%

入力ユーザーチェック

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 5,628

Yoshi--

score 58

//ユーザー登録に関するリクエストを処理するコントローラ

package servlet;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import model.RegisterUserLogic;
import model.User;

@WebServlet("/RegisterUser")
public class RegisterUser extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // サーブレットクラスの動作を決定する「action」の値をリクエストパラメータから取得
        String action = request.getParameter("action");

        if(!"done".equals(action)){
            // 「ユーザー登録」をリクエストされたときの処理
            RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/registerForm.jsp");
            dispatcher.forward(request, response);
        } else {
            // 「登録」をリクエストされたときの処理
            RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/registerDone.jsp");
            dispatcher.forward(request, response);
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // リクエストの文字コードを指定
        request.setCharacterEncoding("UTF-8");

        // サーブレットクラスの動作を決定する「action」の値をリクエストパラメータから取得
        String action = request.getParameter("action");

        if (!"done".equals(action)) {
            //「確認」をリクエストされたときの処理

            String nickName = request.getParameter("nickName");
            String eMail = request.getParameter("eMail");
            String pass = request.getParameter("pass");
            String userName = request.getParameter("userName");

            //入力チェック
            Map<String, String>errors = new HashMap<String, String>();


            if( (nickName == null || nickName.trim().length() == 0) &&
                (eMail == null || eMail.trim().length() == 0) &&
                (pass == null || pass.trim().length() == 0) &&
                (userName == null || userName.trim().length() == 0)){
                errors.put("nickName", " * 氏名を入力してください。");
                errors.put("eMail", " * メールアドレスを入力してください。");
                errors.put("pass", " * パスワードを入力してください。");
                errors.put("userName", " * ユーザー名を入力してください。");
            }
// 登録するユーザー情報を生成
            User registerUser = new User(nickName, eMail, pass, userName);

            // セッションスコープに登録ユーザーを保存
            HttpSession session = request.getSession();
            session.setAttribute("registerUser", registerUser);

            if(!errors.isEmpty()){   //errorsが空でない時(入力されていないのでエラーメッセージがある時)
                //入力エラーがある場合は入力画面に戻す
                request.setAttribute("errors", errors);
                RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/registerForm.jsp");
                dispatcher.forward(request, response);

            }else{
                //エラーがない時、確認画面にフォワードする
            RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/registerConfirm.jsp");
            dispatcher.forward(request, response);
            }

        } else {
            // 登録確認画面から「登録」をリクエストされたときの処理

            // セッションスコープに保存された登録ユーザーを取得
            HttpSession session = request.getSession();
            User registerUser = (User) session.getAttribute("registerUser");

            // 登録処理の呼び出し
            RegisterUserLogic logic = new RegisterUserLogic();
            logic.execute(registerUser);

            // 不要となったセッションスコープ内のインスタンスを削除
            session.removeAttribute("registerUser");

            // 登録後のリダイレクト
            response.sendRedirect(request.getServletContext().getContextPath() + "/RegisterUser?action=done");
        }
    }
}

この場合、氏名、メール、パスワード、ユーザー名が全て、入力されていない時にメッセージが出ると思うのですが、

例えば、メールだけとか

氏名とメールだけが空の場合の

書き方は同じように
if文で書いていくのでしょうか?

if((nickName == null || nickName.trim().length() == 0) && (eMail == null || eMail.trim().length() == 0)){
errors.put("nickName", " * 氏名を入力してください。");
errors.put("eMail", " * メールアドレスを入力してください。");
}

パターンの種類が多くてもifをたくさん使うやり方が望ましいのでしょうか??

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

どのやり方もケースバイケースではありますが、この場合、私なら氏名、メール、パスワード、ユーザー名について一つずつif文による判定を入れ、エラーになった分のエラー文言を配列に格納します。

その後、配列に一つでも値が入っていれば、その値を繰り返し処理で全て表示します。

これで、一つ一つのエラーチェックに対して、該当するエラーのみを表示することが出来ます。

■処理概要
1.エラー文言配列「error」を宣言
2.氏名が入力されていない → errorに「氏名を入力して下さい」を格納
3.メールが入力されていない → errorに「メールを入力して下さい」を格納
4.パスワードが入力されていない → errorに「パスワードを入力して下さい」を格納
5.ユーザーが入力されていない → errorに「ユーザーを入力して下さい」を格納
6.errorの配列の長さが0でなければ、errorに格納されている値を全て表示する

※追記

例えばこんな感じでしょうか。デバッグしていないので動くかどうかは分かりません。参考程度としてください。

ArrayList<String> errors = new ArrayList<String>();

if(nickName == null){
  errors.add(" * 氏名を入力してください。");
}

if(eMail == null){
  errors.add("  * メールアドレスを入力してください。");
}

if(pass == null){
  errors.add(" * パスワードを入力してください。");
}

if(userName == null){
  errors.add(" * ユーザー名を入力してください。");
}

if(errors.isEmpty == false){
  //エラー処理
  for(int i=0; i < errors.size(); i++) {
    System.out.println(errors.get(i));
  }
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/15 21:30

    回答編集しておきました。

    キャンセル

  • 2017/05/16 09:17

    なるほど!どうもありがとうございました。

    キャンセル

  • 2017/05/16 09:37

    コード間違えていましたので修正しておきました。errors.isEmpty == true、ではなくerrors.isEmpty == false、です。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る