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

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

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

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

1回答

2049閲覧

Servlet-JSP での条件分岐

tatakauneko3

総合スコア4

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

0グッド

1クリップ

投稿2021/08/16 09:15

入力された結果に応じて下記のように画面を分岐させたいと思っています。
①入力された文字が全て正しければ、確認画面
②一つでもエラーがあれば、エラー画面

ArrayListを使ってエラー文言を保存(エラー画面で表示する)するので、『list.size()>0』で分岐を試みたのですが文字入力の結果にかかわらずエラー画面に遷移してしまいます。目的と異なりますが、if-elseの遷移ページを逆にすると文字入力の結果に関わらず確認画面に遷移してしまいます。

恐らくは条件分岐のやり方が良くないのかと推測しているのですがご教授ください。
※各メソッドは別クラスで明記

<使用ソフト>
eclipse Version: Oxygen.3a Release (4.7.3a)
Apache Tomcat/8.0.50

JAVA

1package ex; 2 3import java.io.IOException; 4import java.util.ArrayList; 5 6import javax.servlet.RequestDispatcher; 7import javax.servlet.ServletException; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11import javax.servlet.http.HttpSession; 12 13/** 14 * ValidateServlettクラス 15 */ 16public class ValidateServlet extends HttpServlet { 17 18 protected void doPost(HttpServletRequest request, 19 HttpServletResponse response) throws ServletException, IOException { 20 21 // レスポンスの為のコンテンツタイプの設定 22 response.setContentType("text/html; charset=utf-8"); 23 // リクエストのエンコードの設定 24 request.setCharacterEncoding("utf-8"); 25 26 // セッションの取得 27 HttpSession session = request.getSession(); 28 // セッションからformBeanを取得 29 FormBean formBean = (FormBean) session.getAttribute("formBean"); 30 31 String code = request.getParameter("code"); 32 String name = request.getParameter("name"); 33 String address = request.getParameter("address"); 34 String number = request.getParameter("number"); 35 String msg = ""; 36 37 // FormBeanクラスに入力データをセット 38 formBean.setCode(code); 39 formBean.setName(name); 40 formBean.setAddress(address); 41 formBean.setNumber(number); 42 43 // formBeanをセッションにセット 44 session.setAttribute("formBean", formBean); 45 46 //ArrayListをインスタンス生成 47 ArrayList<String> list = new ArrayList<String>(); 48 49 //従業員コードの文字入力チェック 50 if (ValidateUtil.isNull(code)) { 51 msg = "従業員コードを入力してください"; 52 list.add(msg); 53 } 54 if (ValidateUtil.isHalf(code)) { 55 msg = "従業員コードは半角英数字で入力してください"; 56 list.add(msg); 57 } 58 if (ValidateUtil.isMaxLength(code, 20)) { 59 msg = "従業員コードは20文字以内に入力してください"; 60 list.add(msg); 61 } 62 63 //従業員氏名の文字チェック 64 if (ValidateUtil.isNull(name)) { 65 msg = "従業員氏名を入力してください"; 66 list.add(msg); 67 } 68 69 if (ValidateUtil.isFull(name)) { 70 msg = "従業員氏名は全角文字で入力してください"; 71 list.add(msg); 72 } 73 74 if (ValidateUtil.isMaxLength(name, 30)) { 75 msg = "従業員氏名は30文字以内に入力してください"; 76 list.add(msg); 77 } 78 79 //住所の文字チェック 80 if (ValidateUtil.isNull(address)) { 81 msg = "住所を入力してください"; 82 list.add(msg); 83 } 84 85 if (ValidateUtil.isFull(address)) { 86 msg = "住所は全角文字で入力してください"; 87 list.add(msg); 88 } 89 90 if (ValidateUtil.isMaxLength(address, 10)) { 91 msg = "住所は30文字以内に入力してください"; 92 list.add(msg); 93 } 94 95 //電話番号の文字チェック 96 if (ValidateUtil.isNull(number)) { 97 msg = "電話番号を入力してください"; 98 list.add(msg); 99 } 100 101 if (ValidateUtil.isHalfNum(number)) { 102 msg = "電話番号は半角数字で入力してください"; 103 list.add(msg); 104 } 105 106 if (ValidateUtil.isMaxLength(number, 10)) { 107 msg = "電話番号は30文字以内に入力してください"; 108 list.add(msg); 109 } 110 111 // セッションに値設定 112 session.setAttribute("list", list); 113 114 //結果に応じてページ遷移を変える 115 if (list.size() > 0) { 116 RequestDispatcher RD = request.getRequestDispatcher("/ex/error.jsp"); 117 // forwardメソッドで、処理を転送 118 RD.forward(request, response); 119 } else { 120 RequestDispatcher rd = request.getRequestDispatcher("/ex/confirm.jsp"); 121 // forwardメソッドで、処理を転送 122 rd.forward(request, response); 123 } 124 } 125}

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

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

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

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

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

m.ts10806

2021/08/16 10:03

デバッグはされたのでしょうか。
tatakauneko3

2021/08/16 11:12

原因が分からないのですがデバッグが作動しません。デバッグを選んでも実行が活性化されず『デバッグ構成』しかありません。
dodox86

2021/08/16 11:31

条件分岐の仕方云々ではなく、入力されている値がすべて適切かまたはValidateUtil.isなんちゃらのメソッドにバグがあるのでは?
m.ts10806

2021/08/16 11:37 編集

デバッグ環境整えてください。 (そもそも「デバッグとは」から理解するべきでは)
tatakauneko3

2021/08/16 12:18

m.ts10806様 おっしゃていることは分かります。ただ、Javaでは出来ていたデバックがJavaEEだと出来なくて調べても分からず、初めて間もない私にはその違いが分からず質問しております。
tatakauneko3

2021/08/16 12:20

dodox86様 ありがとうございます。ValidateUtil.isのメソッド部分はテキスト提供のものを使っているので恐らくはその可能性は低いかなと考えております。
jimbe

2021/08/16 15:56 編集

デバッグ環境が作れないのであれば、入力チェックを一旦全てコメントアウトして確認画面に遷移するのをチェックした後、入力チェックを一つずつ有効にしていってエラーに飛ぶ原因はどれなのかを探す等してみては如何でしょうか。 というか、エラー画面で list に入ったメッセージを表示しているのですよね。それで何が問題なのか分かるのではないでしょうか。 (エラーメッセージとチェックのパラメータが違うような個所もありますが…。) ValidateUtil の isNull は null の時に true になるようですのに、isFull は全角文字列ではない時に true になるのでしょうか…。
guest

回答1

0

ベストアンサー

単純に list に必ず何かしらのエラーメッセージが追加されてしまう。
つまり、エラーチェックのどれかに必ず引っかかっているという事は無いでしょうか?
エラーチェック前後でサイズを確認(ログに出す)して、
エラーチェック後にサイズが1以上であれば、
何のメッセージが登録されているかログで表示し確認してみるのはいかがでしょうか?

投稿2021/08/17 02:03

hirakosu

総合スコア56

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

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

tatakauneko3

2021/08/27 00:25

回答頂きありがとうございます。お礼が遅くなり申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問