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

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

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

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

Q&A

解決済

2回答

5050閲覧

未入力チェック 文字と数字両方適応させた処理

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

0グッド

0クリップ

投稿2019/08/17 14:29

前提・実現したいこと

入力フォームで未入力チェックをしたいのですが、現在半角数字を入力したときにはエラーメッセージが表示されるようになっていますが、全角や文字列が入力されるとエラーが出てしまいます。ユーザーが全角や文字を入力したときにもエラーの処理を行いたいです。

発生している問題・エラーメッセージ

try,catchの例外処理がうまく使えていない。

エラーメッセージ

該当のソースコード

java

1protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 // TODO Auto-generated method stub 3 EntityManager em = DBUtil.createEntityManager(); 4 5 6 →パラメータを取得する際に、ここにtry7 8 String age = request.getParameter("age"); 9 String gender_flag = request.getParameter("gender_flag"); 10 String height = request.getParameter("height"); 11 String weight = request.getParameter("weight"); 12 String fat_percentage = request.getParameter("fat_percentage"); 13 String waist = request.getParameter("waist"); 14 String activity = request.getParameter("activity"); 15 16 →取得後catch(NumberException)17 18 Health health = new Health(); 19 20 health.setAge((age != null && age.equals("")) ? null : Integer.parseInt(age)); 21 health.setGender_flag(gender_flag); 22 health.setHeight((height != null && height.equals("")) ? null : Double.parseDouble(height)); 23 health.setWeight((weight != null && weight.equals("")) ? null : Double.parseDouble(weight)); 24 health.setFat_percentage((fat_percentage != null && fat_percentage.equals("")) ? 0 : Double.parseDouble(fat_percentage)); 25 health.setWaist((waist != null && waist.equals("")) ? 0 : Double.parseDouble(waist)); 26 health.setActivity(activity); 27 28 →それともerrorチェック前? 29 30 // 未入力チェック(年齢、身長、体重のみ必須) 31 List<String> errors = HealthValidator.validate(health); 32 if(errors.size() > 0) { 33 em.close(); 34 request.setAttribute("_token", request.getSession().getId()); 35 request.setAttribute("health", health); 36 request.setAttribute("errors", errors); 37 RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/health/healthCheck.jsp"); 38 rd.forward(request, response); 39 } 40 41 HealthCheckLogic healthCheckLogic = new HealthCheckLogic(); 42 43 healthCheckLogic.execute(health); 44 45 request.setAttribute("health", health); 46 47 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/views/health/healthCheckResult.jsp"); 48 dispatcher.forward(request, response); 49 } 50}

試したこと

try,catchとNumberExceptionを使用すれば数字以外を処理できると調べたのですが、使いどころ(コードの挿入箇所)が理解できず苦しんでいます。初心者な質問で申し訳ありませんがご助力お願いします。

補足情報(FW/ツールのバージョンなど)

eclipse
Tomcat8

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

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

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

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

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

guest

回答2

0

ベストアンサー

タイミングとしては、
→取得後catch
→それともerrorチェック前?
の間にある Health クラスにリクエストパラメータを格納する箇所でしょう。

ServletのdoPostメソッドの中にチェック処理を全部実装するのはメソッドが長くなってしまうので、

  • 別メソッドを作って Health クラスにリクエストパラメータを格納する処理を実装するか
  • ないしはHealthクラスそのものに実装する

として、例外の制御をdoPostの中で実装するのが良いでしょうか。

投稿2019/08/18 06:10

A-pZ

総合スコア12011

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

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

退会済みユーザー

退会済みユーザー

2019/08/18 10:08

具体的な箇所を明示していただきありがとうございます。 自分の思う完全な処理ではありませんが、一応の解決ができました。 また、可読性を考えた実装方法も提案していただけたので、参考にさせていただきます。 本当にありがとうございました。
guest

0

try-catch の基本は

try { A } catch( B ) { C }

という書き方で, A で B という例外が発生した場合に C にフローが移るというものです.
ですので, 「全角や文字を入力したとき」どこで, どのような例外が発生するのかを明確にし, その発生元が A となるように try-catch で囲み, 発生する例外 を B に(例外クラス名 変数の形で)書き, C でエラー処理を行ってください.

なお, 変換時の例外でエラーを得る方法の他, 変換前に半角数字以外が含まれていないかをチェックする方法もあります.

投稿2019/08/18 02:13

編集2019/08/18 02:13
jimbe

総合スコア12646

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

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

退会済みユーザー

退会済みユーザー

2019/08/18 10:11

回答ありがとうございます。 自分の知識不足のため、どこが例外発生個所かすらわかっていませんでした。 ですが、catchやA,B,Cの意味などは理解することができました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問