RikuMoto
@RikuMoto (Riku Moto)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Java 外部クラスにエラーチェック処理を記述し値を返したい

Q&A

Closed

解決したいこと

外部にエラーチェックの処理を記述し呼ばれたら、エラーかどうかの値を返したいです。

現在のコード

A.java
    String code_error;
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String code = request.getParameter("Code");

        code_error = "";
        checkCode(code);
        try{
        //エラーメッセージチェック
			if (!(code_error.isEmpty())){
                request.setAttribute("code_error", code_error);   
                throw new IOException();
                }
			//正常終了
			sql = "insert into products(code) values('" + code + "')";
			try{
				int res = state.executeUpdate(sql);
               }catch(Exception ex){
				ex.printStackTrace();
			}
        }catch (IOException ex) {
		}
		RequestDispatcher dispatch = request.getRequestDispatcher("URL.jsp");
		dispatch.forward(request, response);
    }

	//コードエラーチェック
	private void checkCode(String code) {
		if (checkNull(code) == false) {
			code_error = "[コード]入力してください";
    		return;
		}
        return;
}
	//nullチェック
	private boolean checkNull(String value) {
		if(value.isEmpty()){
			return false;
		}
		return true;
	}

上記のファイルを2分割
・登録だけの処理
・エラーチェック処理
したいです。

試したこと

A.java
import java.error.*;
String code_error;
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String code = request.getParameter("Code");

        code_error = "";
        error.checkCode(code);
        try{
        //エラーメッセージチェック
				if (!(code_error.isEmpty())){
                request.setAttribute("code_error", code_error); 
                throw new IOException();
                }
				//正常終了
				sql = "insert into products(code) values('" + code + "')";
				try{
					int res = state.executeUpdate(sql);
				}catch(Exception ex){
					ex.printStackTrace();
				}
        }catch (IOException ex) {
		}
		RequestDispatcher dispatch = request.getRequestDispatcher("URL.jsp");
		dispatch.forward(request, response);
    }

error.java
	static String code_error;
	public static String checkCode(String code) {
		if (checkNull(code) == false) {
			return "[コード]入力してください";
		}
		return code;
	}
	//nullチェック
	static boolean checkNull(String value) {
		if(value.isEmpty()){
			return false;
		}
		return true;
	}

こちらの試したコードだと
エラーではなかった場合問題ないのですが、エラーになった場合、Aのcode_errorの変数にエラーメッセージが代入してくれないので困っています。

どなたかご教授お願い致します。

0

2Answer

変数code_errorをどこでも更新していないので
code_error = "";の初期値のままになるのは当然の動作ではないでしょうか。

7、8行目を

A.java
code_error = error.checkCode(code);

としてやるとかしないと更新されないんじゃないでしょうか。

またパッと目についた範囲ですが
12行目

A.java
if (!(code_error.isEmpty()){

は丸括弧の個数が合っていないのと、
if文終了の為の波括弧が抜けています。

エラーメッセージ代入以前に
正常に動作しないと思いますがいかがでしょうか。

1Like

Comments

  1. @RikuMoto

    Questioner

    変数code_errorをどこでも更新していないので
    code_error = "";の初期値のままになるのは当然の動作ではないでしょうか。

    →こちらですが
     code_error = error.checkCode(code);変数を用意して行ったのですが、正常終了するときにcode_errorに値が入ってしまい、if (!(code_error.isEmpty())こちらの部分で引っ掛かってしまいます。


    if (!(code_error.isEmpty()){
    →こちらの部分ですが正式なソースを記述できていませんでした。申し訳ございません。
     一部を切り取ってコピペしたのでおかしなソースコード記述してしまいました。

if (!(ode_error.isEmpty()){
→こちらの部分ですが正式なソースを記述できていませんでした。申し訳ございません。
 一部を切り取ってコピペしたのでおかしなソースコード記述してしまいました。

上記について承知しました。

→こちらですが
 code_error = error.checkCode(code);変数を用意して行ったのですが、正常終了するときにcode_errorに値が入ってしまい、if (!(code_error.isEmpty())こちらの部分で引っ掛かってしまいます。

安直な例を示してしまいましたね…

例えば、error.javaクラスを
ExecutionResults.java(実行結果クラス)に拡張して
以下のフィールド・セッター、ゲッターを用意
(必要であれば判別専用の別クラスを用意)

String success_check_code_result
String error_check_code_result
boolean success_check_null_result
boolean error_check_null_result

処理の結果次第で各フィールドに詰め込んでからreturnし
取り出して判別する
execution_results.getErrorCheckCodeResult().isEmpty()
のような設計にしてはどうでしょうか。(あくまで一例ですが)

チェックの種類が増えた場合は
また別の措置を講じる必要があると思いますが
現状の2種類ならこれでなんとかなるかと。

1Like

Comments

  1. @RikuMoto

    Questioner

    ありがとうございます!!
    とても助かります。
    参考にさせていただきます。

Your answer might help someone💌