入力データを検証してみよう!

※サンプルでは、Meteorを使用しています。

入力された値を検証し、エラーメッセージを画面に表示します。

validate.html

<html>
<head>
<title>データ検証をしてみよう!</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>

<body bgcolor="#FFFFFF" text="#000000">
<form name="form1" method="post" action="">
<br>
<table width="268" border="0">
<tr>
<td width="60">メモ1</td>
<td width="198">
<input type="text" name="textfield">
</td>
</tr>
<tr>
<td width="60">メモ2</td>
<td width="198">
<textarea name="textfield2"></textarea>
</td>
</tr>
</table>
<br>
<input type="submit" name="submit" value="送信">

</form>
<br>
<!-- @quark id="warning" --><!-- /@quark --><br>
</body>
</html>


URを使用して作成する場合、以下の手順で作成します。

(1)バリデータの作成

 インターフェイスValidatorを実装するクラスを作成し、メソッドvalidateをオーバーライドします。

Validator1.java

import jp.kuro.ur.*;

public class Validator1 implements Validator {
    public final ParamResult validate(Object obj) {
        ParamResult pr = new ParamResult();

        String tmp = (String) obj;

        if (tmp.getBytes().length > 10) {
            pr.setResult(false);
            pr.setMessage("メモ1が半角10文字を超えています");
        } else {
            pr.setResult(true);
        }

        return pr;
    }
}

Validator2.java

import jp.kuro.ur.*;

/**
 * @author Yasumasa Ashida
 * @since 2003/02/04 8:32:45
 */
public class Validator2 implements Validator {
    public final ParamResult validate(Object obj) {
        ParamResult pr = new ParamResult();

        String tmp = (String) obj;

        if (tmp.getBytes().length > 20) {
            pr.setResult(false);
            pr.setMessage("メモ2が半角20文字を超えています");
        } else {
            pr.setResult(true);
        }

        return pr;
    }
}

Validator3.java

import jp.kuro.ur.*;

public class Validator3 implements Validator {
    public final ParamResult validate(Object obj) {
        ParamResult pr = new ParamResult();

        String tmp = (String) obj;

        if (tmp.getBytes().length == 0) {
            pr.setResult(false);
            pr.setMessage("メモ2は必須入力項目です");
        } else {
            pr.setResult(true);
        }

        return pr;
    }
}

(2)バリデータを使用するサーブレットを作成します。

ValidateServlet.java

//標準API

import java.io.*;
import java.util.HashMap;

//ServletAPI
import javax.servlet.*;
import javax.servlet.http.*;

//Kuro API
import jp.kuro.meteor.*;
import jp.kuro.meteor.printer.HttpPrinter;
import jp.kuro.ur.*;

public class ValidateServlet extends HttpServlet {
    ParserFactory pf;
    Request anl;

    public void init(ServletConfig sConf) throws ServletException {
        ServletContext sc = sConf.getServletContext();

        String path = sc.getRealPath("/WEB-INF/html/");

        pf = new ParserFactory(path);
        pf.parser(Parser.HTML, "validate.html", "Shift_JIS");

        anl = new Request();
    }

    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        doPost(req, res);
    }

    public void doPost(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        Parser xt = pf.parser("validate");

        anl.setCharacterEncoding("Shift_JIS");

        HashMap query = anl.analyze(req).getQuery();

        Trigger tr = new Trigger();
        tr.add("textfield", new Validator1());
        tr.add("textfield2", new Validator2());
        tr.add("textfield2", new Validator3());

        if (query.get("submit") != null && !query.get("submit").equals("")) {
            Element tag = xt.element("name", "textfield");
            Element tag2 = xt.element("name", "textfield2");
            Element tag3 = xt.cxTag("warning");

            Result re = tr.validate(anl);

            if (!re.result()) {
                HashMap detail = re.detail();

                for (Object o : detail.keySet()) {
                    String key = (String) o;
                    ParamResult pr = (ParamResult) detail.get(key);
                    if (!pr.getResult()) {
                        tag3.content(pr.getMessage());
                    }
                }
            }

            tag.attribute("value", (String) query.get("textfield"));
            tag2.content((String) query.get("textfield2"));

        }

        //反映する
        xt.flush();

        HttpPrinter prt = new HttpPrinter(res);
        prt.print(xt);

    }
}





(C)Yasumasa Ashida