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

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

新規登録して質問してみよう
ただいま回答率
85.51%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

8023閲覧

入力ユーザーチェック

Yoshi--

総合スコア62

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/05/15 06:18

java

1//ユーザー登録に関するリクエストを処理するコントローラ 2 3package servlet; 4 5import java.io.IOException; 6import java.util.HashMap; 7import java.util.Map; 8 9import javax.servlet.RequestDispatcher; 10import javax.servlet.ServletException; 11import javax.servlet.annotation.WebServlet; 12import javax.servlet.http.HttpServlet; 13import javax.servlet.http.HttpServletRequest; 14import javax.servlet.http.HttpServletResponse; 15import javax.servlet.http.HttpSession; 16 17import model.RegisterUserLogic; 18import model.User; 19 20@WebServlet("/RegisterUser") 21public class RegisterUser extends HttpServlet { 22 private static final long serialVersionUID = 1L; 23 24 protected void doGet(HttpServletRequest request, HttpServletResponse response) 25 throws ServletException, IOException { 26 27 // サーブレットクラスの動作を決定する「action」の値をリクエストパラメータから取得 28 String action = request.getParameter("action"); 29 30 if(!"done".equals(action)){ 31 // 「ユーザー登録」をリクエストされたときの処理 32 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/registerForm.jsp"); 33 dispatcher.forward(request, response); 34 } else { 35 // 「登録」をリクエストされたときの処理 36 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/registerDone.jsp"); 37 dispatcher.forward(request, response); 38 } 39 } 40 41 protected void doPost(HttpServletRequest request, HttpServletResponse response) 42 throws ServletException, IOException { 43 44 // リクエストの文字コードを指定 45 request.setCharacterEncoding("UTF-8"); 46 47 // サーブレットクラスの動作を決定する「action」の値をリクエストパラメータから取得 48 String action = request.getParameter("action"); 49 50 if (!"done".equals(action)) { 51 //「確認」をリクエストされたときの処理 52 53 String nickName = request.getParameter("nickName"); 54 String eMail = request.getParameter("eMail"); 55 String pass = request.getParameter("pass"); 56 String userName = request.getParameter("userName"); 57 58 //入力チェック 59 Map<String, String>errors = new HashMap<String, String>(); 60 61 62 if( (nickName == null || nickName.trim().length() == 0) && 63 (eMail == null || eMail.trim().length() == 0) && 64 (pass == null || pass.trim().length() == 0) && 65 (userName == null || userName.trim().length() == 0)){ 66 errors.put("nickName", " * 氏名を入力してください。"); 67 errors.put("eMail", " * メールアドレスを入力してください。"); 68 errors.put("pass", " * パスワードを入力してください。"); 69 errors.put("userName", " * ユーザー名を入力してください。"); 70 } 71// 登録するユーザー情報を生成 72 User registerUser = new User(nickName, eMail, pass, userName); 73 74 // セッションスコープに登録ユーザーを保存 75 HttpSession session = request.getSession(); 76 session.setAttribute("registerUser", registerUser); 77 78 if(!errors.isEmpty()){ //errorsが空でない時(入力されていないのでエラーメッセージがある時) 79 //入力エラーがある場合は入力画面に戻す 80 request.setAttribute("errors", errors); 81 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/registerForm.jsp"); 82 dispatcher.forward(request, response); 83 84 }else{ 85 //エラーがない時、確認画面にフォワードする 86 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/registerConfirm.jsp"); 87 dispatcher.forward(request, response); 88 } 89 90 } else { 91 // 登録確認画面から「登録」をリクエストされたときの処理 92 93 // セッションスコープに保存された登録ユーザーを取得 94 HttpSession session = request.getSession(); 95 User registerUser = (User) session.getAttribute("registerUser"); 96 97 // 登録処理の呼び出し 98 RegisterUserLogic logic = new RegisterUserLogic(); 99 logic.execute(registerUser); 100 101 // 不要となったセッションスコープ内のインスタンスを削除 102 session.removeAttribute("registerUser"); 103 104 // 登録後のリダイレクト 105 response.sendRedirect(request.getServletContext().getContextPath() + "/RegisterUser?action=done"); 106 } 107 } 108}

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

例えば、メールだけとか

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

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

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

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

※追記

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

java

1ArrayList<String> errors = new ArrayList<String>(); 2 3if(nickName == null){ 4 errors.add(" * 氏名を入力してください。"); 5} 6 7if(eMail == null){ 8 errors.add(" * メールアドレスを入力してください。"); 9} 10 11if(pass == null){ 12 errors.add(" * パスワードを入力してください。"); 13} 14 15if(userName == null){ 16 errors.add(" * ユーザー名を入力してください。"); 17} 18 19if(errors.isEmpty == false){ 20 //エラー処理 21 for(int i=0; i < errors.size(); i++) { 22 System.out.println(errors.get(i)); 23 } 24} 25 26

投稿2017/05/15 06:27

編集2017/05/16 00:36
akabee

総合スコア1947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yoshi--

2017/05/15 06:30

ありがとうございます。 まだ経験が浅い為、、 例えばでいいのですが、どーいったソースコードになるのでしょうか?? お手数ですが、よろしくお願いいたします
akabee

2017/05/15 06:40

夜になっても良いのであれば添削してみますが、その前に他の方から回答があるかもしれませんね。 ちなみに、どのあたりのコーディングのイメージが掴めませんでしょうか?配列にはArrayListを用いるのが良いかと思いますよ。
Yoshi--

2017/05/15 06:57

ありがとうございます!!
akabee

2017/05/15 12:30

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

2017/05/16 00:17

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

2017/05/16 00:37

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問