<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.3//EN" "document-v13.dtd">
<document>
  <header>
    <title>Commons Validation on POJO</title>
    <abstract>Commons Validation&#12434;POJO&#12391;&#20351;&#12358;&#26041;&#27861;&#12398;&#12513;&#12514;&#26360;&#12365;&#12290;</abstract>
  </header>
  <body>
    <section>
      <title>&#12414;&#12378;&#12399;&#20351;&#12356;&#26041;</title>
      <section>
        <title>&#35373;&#23450;&#12501;&#12449;&#12452;&#12523;(validation.xml&#12392;validator.properties)&#12398;&#26360;&#12365;&#26041;</title>
        <section>
          <title>properties&#12420;xml&#12501;&#12449;&#12452;&#12523;&#12398;&#32622;&#12365;&#22580;&#25152;&#12290;</title>
          <p>&#29694;&#29366;&#12391;&#12399;&#12289;&#35373;&#23450;&#12501;&#12449;&#12452;&#12523;&#12434;&#12525;&#12540;&#12489;&#12377;&#12427;&#12463;&#12521;&#12473;(ValidatorLoader)&#12391;</p>
          <source xml:space="preserve"><![CDATA[
stream = ValidatorLoader.class.getResourceAsStream(property);
          ]]></source>
          <p>&#12420;</p>
          <source xml:space="preserve"><![CDATA[
        input = ValidatorLoader.class.getResourceAsStream(validatorRules);
          ]]></source>
          <p>&#12392;&#12356;&#12358;&#12424;&#12358;&#12395;&#12289;ValidatorLoader&#12398;&#12497;&#12483;&#12465;&#12540;&#12472;&#22580;&#25152;&#12363;&#12425;&#12525;&#12540;&#12489;&#12375;&#12390;&#12356;&#12427;&#12398;&#12391;&#12289;&#23455;&#38555;&#12395;&#12399;<em>com.chikkun.common.validator</em>&#12384;&#12290;</p>
        </section>
        <section>
          <title>properties&#12420;xml&#12501;&#12449;&#12452;&#12523;&#12398;&#21517;&#21069;</title>
          <p>&#20778;&#20808;&#38918;&#20301;&#12364;&#12354;&#12427;&#12290;&#20197;&#19979;&#12395;&#12381;&#12398;&#20778;&#20808;&#38918;&#20301;&#12434;&#25369;&#12370;&#12427;&#12290;</p>
          <ol>
            <li>default&#12391;&#12399;&#12289;xml&#12364;<em>validator.xml&#12392;validatorRules.xml</em>&#12289;properties&#12364;<em>validator.xml</em>&#12290;</li>
            <li>properties&#12395;<em>validator-pathnames=validator-rules.xml,validator-spring.xml</em>&#12392;&#12356;&#12358;&#12424;&#12358;&#12395;&#26360;&#12365;&#36796;&#12435;&#12391;&#12362;&#12367;&#12392;&#12289;
                &#12371;&#12428;&#12364;xml&#12501;&#12449;&#12452;&#12523;&#12398;&#12525;&#12540;&#12489;&#12501;&#12449;&#12452;&#12523;&#12399;<em>&#19968;&#30058;&#20778;&#20808;</em>&#12373;&#12428;&#12427;(&#20197;&#19979;&#12398;ValidatorUtils&#12463;&#12521;&#12473; &#29983;&#25104;&#12377;&#12427;&#38555;&#12398;&#24341;&#25968;&#12424;&#12426;&#12418;&#12373;&#12425;&#12395;&#20778;&#20808;&#12373;&#12428;&#12427;&#12371;&#12392;&#12395;&#27880;&#24847;!)</li>
            <li>
              <code>ValidatorUtilss util = new Validatortils(String
              propertiesName)</code>&#12398;&#12424;&#12358;&#12395;&#12289;properties&#12398;&#21517;&#21069;&#12434;&#25351;&#23450;&#12375;&#12383;&#22580;&#21512;&#12399; &#12381;&#12428;&#12364;&#20351;&#12431;&#12428;&#12427;&#12290;</li>
            <li>
              <code>ValidatorUtilss util = new Validatortils(String propertiesName, String
              xmlName)</code>&#12398;&#12424;&#12358;&#12395;&#12289;properties&#12398;&#21517;&#21069;&#12392;
              xml&#12501;&#12449;&#12452;&#12523;&#12398;&#21517;&#21069;&#12434;&#25351;&#23450;&#12375;&#12383;&#22580;&#21512;&#12399;&#12289;&#12381;&#12428;&#12425;&#12364;&#20351;&#12431;&#12428;&#12427;&#12290;&#12383;&#12384;&#12375;&#12289;propertiesName&#12395;&#20808;&#12395;&#36848;&#12409;&#12383;
                <em>validator-pathnames=validator-rules.xml,validator-spring.xml</em>&#12364;&#26360;&#12363;&#12428;&#12390;&#12356;&#12427;&#12392;&#12289;xml&#12501;&#12449;&#12452;&#12523;&#12395;&#38306;&#12375;&#12390;&#12399;&#28961;&#35222;&#12373;&#12428;&#12390;&#12375;&#12414;&#12358;&#12398;&#12391;&#12289;
              &#27880;&#24847;&#12364;&#24517;&#35201;&#12290;</li>
          </ol>
        </section>
        <section>
          <title>validation.xml</title>
          <p>&#22522;&#26412;&#30340;&#12394;&#26360;&#12365;&#26041;&#12399;&#12289;struts&#12395;&#12362;&#12369;&#12427;&#20351;&#12356;&#26041;&#12392;&#21516;&#12376;(<link href="http://struts.apache.org/userGuide/dev_validator.html">&#26360;&#12365;&#26041;</link>&#12434;&#21442;&#32771;)&#12290;&#19968;&#37096;&#12289;&#26085;&#26412;&#35486;&#12395;&#38306;&#12375;&#12390;&#12418;&#20351;&#12360;&#12427;&#12424;&#12358;&#12395;&#12375;&#12383;&#12398;&#12391;&#12289;&#20363;&#12434;&#25369;&#12370;&#12427;&#12290;</p>
          <source xml:space="preserve"><![CDATA[
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
    <formset>
        <form name="commons">
            <field property="loginName" depends="required">
                <arg0 key="form.loginName.displayname"/>
            </field>
            <field property="nameRead" depends="maxlength">
                <arg0 key="form.nameRead.displayname"/>
                <arg1 name="maxlength" key="${var:maxlength}"/>
                <var>
                    <var-name>maxlength</var-name>
                    <var-value>10</var-value>
                </var>
            </field>
            <field property="quarter" depends="intRange">
                <arg0 key="form.quarter.displayname"/>
                <arg1 key="${var:min}"/>
                <arg2 key="${var:max}"/>
                <var>
                    <var-name>min</var-name>
                    <var-value>4</var-value>
                </var>
                <var>
                    <var-name>max</var-name>
                    <var-value>16</var-value>
                </var>
            </field>
            <field property="email" depends="email">
                <arg0 key="form.email.displayname"/>
            </field>
            <field property="note" depends="date">
                <arg0 key="form.note.displayname"/>
                <arg1 key="${var:datePattern}"/>
                <var>
                    <var-name>datePattern</var-name>
                    <var-value>yyyy-mm-dd</var-value>
                </var>
            </field>
            <field property="name" depends="url">
                <arg0 key="form.name.displayname"/>
                <var>
                    <var-name>allowallschems</var-name>
                    <var-value>true</var-value>
                </var>
            </field>
            <field property="pass" depends="mask">
                <arg0 key="form.pass.displayname"/>
                <var>
                    <var-name>mask</var-name>
                    <var-value>^[a-zA-Z]+$</var-value>
                </var>
            </field>
        </form>
        <form name="common">
            <field property="loginName" depends="byte">
                <arg0 key="form.loginName.displayname"/>
            </field>
            <field property="nameRead" depends="minlength">
                <arg0 key="form.nameRead.displayname"/>
                <arg1 key="${var:minlength}"/>
                <var>
                    <var-name>minlength</var-name>
                    <var-value>5</var-value>
                </var>
            </field>
            <field property="quarter" depends="doubleRange">
                <arg0 key="form.quarter.displayname"/>
                <arg1 key="${var:min}"/>
                <arg2 key="${var:max}"/>
                <var>
                    <var-name>min</var-name>
                    <var-value>-10000</var-value>
                </var>
                <var>
                    <var-name>max</var-name>
                    <var-value>10000</var-value>
                </var>
            </field>
            <field property="email" depends="creditCard">
                <arg0 key="form.email.displayname"/>
                <var>
                    <var-name>type</var-name>
                    <var-value>master</var-value>
                </var>
            </field>
            <field property="note" depends="validwhen">
                <arg0 key="form.note.displayname"/>
                <arg1 key="Password"/>
                <msg name="validwhen" key="error.password.mismatch"/>
                <var>
                    <var-name>test</var-name>
                    <var-value>(*this* == pass)</var-value>
                </var>
            </field>
            <field property="name" depends="requiredif">
                <arg0 key="form.name.displayname"/>
                <arg1 key="Password"/>
                <msg name="requiredif" key="errors.requiredif"/>
                <var>
                    <var-name>field[0]</var-name>
                    <var-value>pass</var-value>
                </var>
                <var>
                    <var-name>fieldTest[0]</var-name>
                    <var-value>NOTNULL</var-value>
                </var>
            </field>
        </form>
        <form name="staff">
            <field property="name" depends="required,kanji">
                <arg0 key="form.name.displayname"/>
            </field>
            <field property="quarter" depends="required,hiragana">
                <arg0 key="form.quarter.displayname"/>
            </field>
            <field property="nameRead" depends="required,katakana">
                <arg0 key="form.nameRead.displayname"/>
            </field>
            <field property="email" depends="required,zenkaku">
                <arg0 key="form.email.displayname"/>
            </field>
            <field property="pass" depends="required,zenkakuAll">
                <arg0 key="form.pass.displayname"/>
            </field>
        </form>
    </formset>
</form-validation>
          ]]></source>
        </section>
        <section>
          <title>properties&#12398;&#26360;&#12365;&#26041;</title>
          <p>&#12371;&#12428;&#12399;&#36890;&#24120;&#12398;struts&#12398;&#22580;&#21512;&#12392;&#21516;&#12376;&#12290;&#12383;&#12384;&#12289;properties&#12398;&#20013;&#12395;&#12456;&#12521;&#12540;&#12513;&#12483;&#12475;&#12540;&#12472;&#12364;&#12394;&#12356;&#22580;&#21512;&#12398;&#12487;&#12501;&#12457;&#12523;&#12488;&#12398;&#12513;&#12483;&#12475;&#12540;&#12472;&#12394;&#12393;&#12399;&#12394;&#12356;&#12398;&#12391;&#12289;&#12375;&#12387;&#12363;&#12426;&#26360;&#12365;&#36796;&#12414;&#12394;&#12356;&#12392;
            &#12513;&#12483;&#12475;&#12540;&#12472;&#12434;&#21462;&#24471;&#12377;&#12427;&#38555;&#12394;&#12393;&#12395;&#12456;&#12521;&#12540;&#12364;&#36215;&#12371;&#12427;&#12398;&#12391;&#12289;&#27880;&#24847;&#12364;&#24517;&#35201;(&#12356;&#12378;&#12428;&#32771;&#12360;&#12394;&#12365;&#12419;&#65289;&#12290;</p>
          <p>&#12469;&#12531;&#12503;&#12523;&#12434;&#35352;&#12377;&#12290;</p>
          <source xml:space="preserve"><![CDATA[
#xml]]>&#22793;&#26356;&#12375;&#12383;&#12356;&#12392;&#12365;&#12289;&#19979;&#35352;&#12434;&#26360;&#12365;&#25563;&#12360;&#12427;&#12290;
<![CDATA[validator-pathnames=validator-rules.xml,validator.xml

#]]>&#12487;&#12501;&#12457;&#12523;&#12488;&#12398;&#12456;&#12521;&#12540;&#12513;&#12483;&#12475;&#12540;&#12472;
<![CDATA[#]]>&#12487;&#12501;&#12457;&#12523;&#12488;&#12434;&#23244;&#12358;&#22580;&#21512;&#12399;<![CDATA[<msg name="validwhen" key="errors.hoge.required"/>
#]]>&#12398;&#12424;&#12358;&#12395;<![CDATA[xml]]>&#12398;&#20013;&#12391;&#25351;&#23450;&#12375;&#12289;&#19979;&#35352;&#12395;&#26360;&#12365;&#21152;&#12360;&#12427;&#12290;
<![CDATA[errors.required={0}]]>&#12399;&#24517;&#38920;&#12391;&#12377;&#12290;
<![CDATA[errors.integer={0}]]>&#12399;&#25972;&#25968;&#12391;&#12394;&#12369;&#12428;&#12400;&#12394;&#12426;&#12414;&#12379;&#12435;&#12290;
<![CDATA[errors.katakana={0}]]>&#12399;&#12459;&#12479;&#12459;&#12490;&#12391;&#12394;&#12369;&#12428;&#12400;&#12394;&#12426;&#12414;&#12379;&#12435;&#12290;
<![CDATA[errors.hiragana={0}]]>&#12399;&#12402;&#12425;&#12364;&#12394;&#12391;&#12394;&#12369;&#12428;&#12400;&#12394;&#12426;&#12414;&#12379;&#12435;&#12290;
<![CDATA[errors.kanji={0}]]>&#12399;&#28450;&#23383;&#12391;&#12394;&#12369;&#12428;&#12400;&#12394;&#12426;&#12414;&#12379;&#12435;&#12290;
<![CDATA[errors.zenkaku={0}]]>&#12399;&#20840;&#35282;&#25991;&#23383;&#12391;&#12394;&#12369;&#12428;&#12400;&#12394;&#12426;&#12414;&#12379;&#12435;&#12290;
<![CDATA[errors.mask={0}]]>&#12399;&#26377;&#21177;&#12394;&#20516;&#12391;&#12399;&#12354;&#12426;&#12414;&#12379;&#12435;&#12290;
<![CDATA[errors.email={0}]]>&#12399;&#12513;&#12540;&#12523;&#12450;&#12489;&#12524;&#12473;&#12392;&#12375;&#12390;&#26377;&#21177;&#12391;&#12354;&#12426;&#12414;&#12379;&#12435;&#12290;
<![CDATA[errors.date={0}]]>&#12399;&#26085;&#20184;&#12398;&#24418;&#24335;&#12395;&#12394;&#12387;&#12390;&#12356;&#12414;&#12379;&#12435;&#12290;
<![CDATA[errors.range={0}]]>&#12399;<![CDATA[{1}]]>&#12363;&#12425;<![CDATA[{2}]]>&#12398;&#38291;&#12395;&#12375;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290;
<![CDATA[errors.minlength={0}]]>&#12399;<![CDATA[{1}]]>&#25991;&#23383;&#20197;&#19978;&#12395;&#12375;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290;
<![CDATA[errors.maxlength={0}]]>&#12399;<![CDATA[{1}]]>&#25991;&#23383;&#20197;&#19979;&#12395;&#12375;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290;
<![CDATA[errors.url={0}]]>&#12399;<![CDATA[URL]]>&#12392;&#12375;&#12390;&#26377;&#21177;&#12391;&#12354;&#12426;&#12414;&#12379;&#12435;&#12290;
<![CDATA[errors.byte={0}]]>&#12399;<![CDATA[-128]]>&#65374;<![CDATA[127]]>&#12414;&#12391;&#12398;&#25972;&#25968;&#12391;&#12377;&#12290;
<![CDATA[errors.short={0}]]>&#12399;<![CDATA[-32768]]>&#65374;<![CDATA[32767]]>&#12414;&#12391;&#12398;&#25972;&#25968;&#12391;&#12377;&#12290;
<![CDATA[errors.float={0}]]>&#12399;<![CDATA[1.4*10E-45]]>&#65374;<![CDATA[3.4*10E38]]>&#12414;&#12391;<![CDATA[(]]>&#27491;&#36000;&#21487;<![CDATA[)]]>&#12398;&#25968;&#12391;&#12377;&#12290;
<![CDATA[errors.double={0}]]>&#12399;<![CDATA[4.9*10E-324]]>&#65374;<![CDATA[1.8*10E308(]]>&#27491;&#36000;&#21487;<![CDATA[)]]>&#12414;&#12391;&#12398;&#25968;&#12391;&#12377;&#12290;
<![CDATA[errors.long={0}]]>&#12399;<![CDATA[-2E63]]>&#65374;<![CDATA[2E63-1]]>&#12414;&#12391;&#12398;&#25972;&#25968;&#12391;&#12377;&#12290;
<![CDATA[errors.creditcard={0}]]>&#12399;&#12463;&#12524;&#12472;&#12483;&#12488;&#12398;&#30058;&#21495;&#12392;&#12375;&#12390;&#26377;&#21177;&#12391;&#12354;&#12426;&#12414;&#12379;&#12435;&#12290;
<![CDATA[errors.requiredif={1}]]>&#12434;&#20837;&#21147;&#12375;&#12383;&#22580;&#21512;&#12289;<![CDATA[{0}]]>&#12399;&#24517;&#38920;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;
<![CDATA[error.password.mismatch={0}]]>&#12392;<![CDATA[{1}]]>&#12364;&#19968;&#33268;&#12375;&#12414;&#12379;&#12435;&#12290;
<![CDATA[#....
          ]]></source>
          <p>&#12383;&#12384;&#12375;&#12289;&#12418;&#12385;&#12429;&#12435;native2ascii&#12391;&#12398;&#22793;&#25563;&#12364;&#24517;&#35201;&#12391;&#12289;&#27425;&#12398;&#12424;&#12358;&#12395;&#20693;&#12398;&#29872;&#22659;&#12391;&#12399;src&#12487;&#12451;&#12524;&#12463;&#12488;&#12522;&#12540;&#12395;&#32622;&#12356;&#12390;&#12354;&#12427;&#12392;&#12289;<code>ant property</code>&#12391;
              native2aschii&#12434;&#34892;&#12387;&#12390;&#12289;<em>target/classes/com/chikkun/common/validator</em>&#12395;&#12467;&#12500;&#12540;&#12373;&#12428;&#12427;&#12424;&#12358;&#12395;&#12375;&#12390;&#12354;&#12427;(&#23455;&#38555;&#12395;&#12399;&#22793;&#25968;&#12384;&#12425;&#12369;&#12391;&#12289;&#12431;&#12369;&#12431;&#12363;&#12425;&#12356;&#12364;)&#12290;</p>
          <source xml:space="preserve"><![CDATA[
    <native2ascii encoding="${local.encoding}" src="src" dest="${classes.dir}/${validator.dir}"
      includes="${validator.name}"/>
          ]]></source>
        </section>
        <section>
          <title>&#23455;&#38555;&#12398;&#12467;&#12540;&#12489;</title>
          <p>sakai</p>
          <source xml:space="preserve"><![CDATA[
ValidatorUtil util = new ValidateUtils("staff");
ValidatorUtil util = new ValidateUtils("staff", "validator-test.properties");
ValidatorUtil util = new ValidateUtils("staff", "validator-test.properties","validator-rules.xml,validator-test.xml");
    ]]></source>
          <p>&#12398;&#12424;&#12358;&#12395;&#12289;</p>
          <source xml:space="preserve"><![CDATA[
validateField("Bean]]>&#20869;&#12539;<![CDATA[xml]]>&#20869;&#12391;&#23450;&#32681;&#12375;&#12383;<![CDATA[field]]>&#21517;<![CDATA[",Bean]]>&#21517;<![CDATA[)
          ]]></source>
          <p>validate&#12434;&#34892;&#12356;&#12289;OK&#12394;&#22580;&#21512;&#12399;true&#12434;&#12289;&#39364;&#30446;&#12394;&#22580;&#21512;&#12399;false&#12364;&#36820;&#12387;&#12390;&#12367;&#12427;&#12290;</p>
          <p>&#12414;&#12383;&#12289;&#12456;&#12521;&#12540;&#12513;&#12483;&#12475;&#12540;&#12472;&#12398;&#21462;&#24471;&#12399;</p>
          
          <source xml:space="preserve"><![CDATA[
String message = util.getErrorMessage("name")
]]></source>
            <p>&#12391;&#12289;</p>
            <source xml:space="preserve"><![CDATA[
            
getErrorMessage("Bean]]>&#20869;&#12539;<![CDATA[xml]]>&#20869;&#12391;&#23450;&#32681;&#12375;&#12383;<![CDATA[field]]>&#21517;<![CDATA[")
          ]]></source>
          <p>&#12398;&#12424;&#12358;&#12395;&#12289;&#27442;&#12375;&#12356;&#12456;&#12521;&#12540;&#12513;&#12483;&#12475;&#12540;&#12472;&#12434;&#21462;&#24471;&#12377;&#12427;&#12290;</p>
        </section>
      </section>
    </section>
    <section>
      <title>Junit</title>
      <p>&#12371;&#12428;&#12363;&#12425;&#20197;&#19979;&#12399;&#12289;&#38283;&#30330;&#36884;&#20013;&#12414;&#12391;(&#24460;&#21322;&#12399;&#12431;&#12420;&#12367;&#12385;&#12419;&#12395;&#12394;&#12387;&#12390;&#12289;&#12391;&#12365;&#12394;&#12363;&#12387;&#12383;(--;)&#12398;&#12513;&#12514;&#26360;&#12365;&#12391;&#12377;&#12290;<strong>&#20491;&#20154;&#30340;&#12394;&#12513;&#12514;&#26360;&#12365;&#12392;&#35328;&#12358;&#12371;&#12392;&#12391;&#12289;&#12372;&#21208;&#24321;&#12434;</strong>
      </p>
      <p>Commons Validator&#12364;struts&#12391;&#12399;&#27161;&#28310;&#12384;&#12364;&#12289;&#12371;&#12398;Validator&#12399;&#20197;&#21069;apache project&#12398;&#20013;&#12391;struts&#12363;&#12425;&#20998;&#38626;&#29420;&#31435;&#12375;&#12383;&#12398;&#12391;&#12289;
        &#20182;&#12398;&#12501;&#12524;&#12540;&#12512;&#12527;&#12540;&#12463;&#12391;&#12418;&#20351;&#12360;&#12427;&#12289;&#12392;&#12356;&#12358;&#12371;&#12392;&#12434;&#31034;&#21766;&#12375;&#12390;&#12356;&#12427;&#12290;</p>
      <p>&#23455;&#38555;&#12395;&#12399;&#12289;&#12377;&#12391;&#12395;Spring&#12391;&#12418;&#20351;&#12360;&#12427;&#12424;&#12358;&#12395;&#12394;&#12387;&#12390;&#12356;&#12427;&#12392;&#12356;&#12358;&#35441;&#12375;&#12384;&#12364;&#12289;&#12486;&#12473;&#12488;&#12398;&#12371;&#12392;&#12394;&#12393;&#12418;&#32771;&#12360;&#12390;&#12289;POJO&#12391;&#12418;&#20351;&#12360;&#12427;&#12424;&#12358;&#12395;&#12289;&#12391;&#12365;&#12428;&#12400;&#12289;&#12375;&#12383;&#12356;&#12290;</p>
      <p>&#12381;&#12371;&#12391;&#12289;&#12388;&#12356;&#12391;&#12395;&#26085;&#26412;&#35486;&#12418;&#12354;&#12427;&#31243;&#24230;&#20351;&#12360;&#12427;&#12424;&#12358;&#12395;&#12289;Commons Validator&#12434;&#25313;&#24373;&#12375;&#35211;&#12424;&#12358;&#12392;&#24605;&#12358;&#12290;&#27969;&#12428;&#12392;&#12375;&#12390;&#12399;</p>
      <ol>
        <li>&#12418;&#12375;commons&#12395;&#12354;&#12427;&#22580;&#21512;&#12395;&#12399;&#12381;&#12428;&#12434;&#24403;&#28982;&#20351;&#12358;&#12427;&#12290;</li>
        <li>&#12394;&#12356;&#22580;&#21512;&#12399;&#12289;validate&#12377;&#12427;&#12513;&#12477;&#12483;&#12489;&#12434;&#33258;&#20316;&#12377;&#12427;&#12290;</li>
        <li>xml&#12394;&#12393;&#12391;validate&#12434;&#21046;&#24481;&#12377;&#12427;&#12383;&#12417;&#12395;&#12289;Commons Validator&#12398;&#27969;&#20736;&#12395;&#12354;&#12387;&#12383;&#12289;&#12463;&#12521;&#12473;&#12434;&#20316;&#25104;&#12290;</li>
      </ol>
      <p>&#12418;&#12392;&#12418;&#12392;&#12399;&#27425;&#12398;&#12424;&#12358;&#12394;&#12471;&#12464;&#12493;&#12481;&#12515;&#12395;&#12394;&#12387;&#12390;&#12356;&#12427;&#12290;</p>
      <source xml:space="preserve"><![CDATA[
    public static boolean validateRequired(Object bean,
                                           ValidatorAction va, Field field,
                                           ActionErrors errors,
                                           HttpServletRequest request)
                                          ]]></source>
      <p>&#12371;&#12428;&#12384;&#12392;&#12289;ActionErrors&#12420;HttpServletRequest&#12434;&#24341;&#25968;&#12395;&#12375;&#12390;&#12356;&#12427;&#12398;&#12391;&#12289;&#20170;&#22238;&#12398;&#12424;&#12358;&#12394;POJO&#12391;&#12418;&#20351;&#12360;&#12427;&#12424;&#12358;&#12395;&#12394;&#12425;&#12394;&#12356;&#12290;&#12371;&#12428;&#12434;</p>
      <source xml:space="preserve"><![CDATA[
    public static boolean validateRequired(Object bean,
                                           Field field)
                                          ]]></source>
      <p>&#12391;&#20351;&#12360;&#12427;&#12424;&#12358;&#12395;&#12375;&#12383;&#12356;&#12290;</p>
      <p>&#12381;&#12371;&#12391;&#12289;&#12381;&#12428;&#12425;&#12434;&#20316;&#25104;&#12377;&#12427;&#12395;&#24403;&#12383;&#12426;&#12289;Junit&#12434;&#20351;&#12387;&#12390;&#12289;&#38283;&#30330;&#12375;&#12390;&#12356;&#12371;&#12358;&#12392;&#24605;&#12358;&#12290;</p>
      <section>
        <title>&#12414;&#12378;&#12399;&#12486;&#12473;&#12488;&#12501;&#12449;&#12540;&#12473;&#12488;</title>
        <p>&#12392;&#12395;&#12363;&#12367;&#12486;&#12473;&#12488;&#12434;&#20316;&#12387;&#12390;&#12415;&#12424;&#12358;&#12290;Eclipse&#12398;Junit&#12434;&#20351;&#12387;&#12390;&#12289;&#12463;&#12521;&#12473;&#12434;&#20316;&#25104;&#12377;&#12427;&#12290;&#12392;&#12426;&#12354;&#12360;&#12378;src/test/com/chikkun/webcms/validate/ValidateTest.java
          &#12434;&#20316;&#25104;&#12377;&#12427;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/17
 *
 */
package com.chikkun.webcms.validate;

import junit.framework.TestCase;

public class ValidateTest extends TestCase {
  public ValidateTest(String arg0) {
    super(arg0);
  }

  protected void setUp() throws Exception {
    super.setUp();
  }

  protected void tearDown() throws Exception {
    super.tearDown();
  }

}
                                              ]]></source>
        <p>&#26368;&#21021;&#12399;&#19978;&#35352;&#12398;&#12424;&#12358;&#12394;&#12402;&#12394;&#24418;&#12364;eclipse&#12395;&#12424;&#12387;&#12390;&#20316;&#25104;&#12373;&#12428;&#12427;&#12290;&#12392;&#12426;&#12354;&#12360;&#12378;&#12486;&#12473;&#12488;&#12398;&#23550;&#35937;&#12392;&#12394;&#12427; JapaneseValidator&#12398;&#12452;&#12531;&#12473;&#12479;&#12531;&#12473;&#12434;&#29983;&#25104;&#12377;&#12427;&#12467;&#12540;&#12489;&#12434;setUp()&#12395;&#25407;&#20837;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
    JapaneseValidator val = new JapaneseValidator();
                                              ]]></source>
        <p>&#24403;&#28982;&#12289;&#12371;&#12428;&#12434;&#20837;&#12428;&#12390;&#12418;&#12467;&#12531;&#12497;&#12452;&#12523;&#12373;&#12360;&#12391;&#12365;&#12394;&#12356;&#12290;&#24403;&#12383;&#12426;&#21069;&#12290;&#12394;&#12435;&#12379;JapaneseValidator&#12463;&#12521;&#12473;&#12394;&#12393;&#12394;&#12356;&#12363;&#12425;&#12290;
          &#12381;&#12371;&#12391;&#20840;&#12367;&#31354;&#12398;&#12467;&#12531;&#12473;&#12488;&#12521;&#12463;&#12479;&#12540;&#12375;&#12363;&#12394;&#12356;&#12289;&#12463;&#12521;&#12473;&#12434;com.chikkun.common.validator.JapaneseValidator.java&#12434;&#20316;&#25104;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
package com.chikkun.common.validator;

public class JapaneseValidator {

  public JapaneseValidator() {
  }
}
                                              ]]></source>
        <p>&#29694;&#29366;&#12391;ValidatorTest&#12399;</p>
        <source xml:space="preserve"><![CDATA[
                    /*
                    * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/17
                    *
                    */
                    package com.chikkun.webcms.validate;
                    
                    import junit.framework.TestCase;
                    
                    import com.chikkun.common.validator.JapaneseValidator;
                    
                    public class ValidateTest extends TestCase {
                    
                    JapaneseValidator val;
                    public ValidateTest(String arg0) {
                    super(arg0);
                    }
                    
                    protected void setUp() throws Exception {
                    val = new JapaneseValidator();
                    super.setUp();
                    }
                    
                    protected void tearDown() throws Exception {
                    super.tearDown();
                    }
                    
                    }
                                              ]]></source>
        <p>&#12371;&#12428;&#12391;&#19968;&#24540;Junit&#12399;&#12467;&#12531;&#12497;&#12452;&#12523;&#12364;&#12391;&#12365;&#12427;&#12290;&#12373;&#12390;&#12486;&#12473;&#12488;&#12513;&#12477;&#12483;&#12489;&#12398;&#20316;&#25104;&#12290;&#26368;&#21021;&#12399;&#20840;&#35282;&#12459;&#12479;&#12459;&#12490;&#12363;&#12393;&#12358;&#12363;&#12434;&#35519;&#12409;&#12427;&#12513;&#12477;&#12483;&#12489;&#12434;Junit&#12395;&#26360;&#12365;&#36796;&#12416;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
package com.chikkun.webcms.validate;

import junit.framework.TestCase;

import com.chikkun.common.validator.JapaneseValidator;

public class ValidateTest extends TestCase {

  JapaneseValidator val;
  public ValidateTest(String arg0) {
    super(arg0);
  }

  public void testKatakana(){
    this.assertTrue(val.isKatakana("]]>&#12469;&#12459;&#12452;&#12459;&#12474;&#12525;&#12454;<![CDATA["));
  }

  protected void setUp() throws Exception {
    val = new JapaneseValidator();
    super.setUp();
  }

  protected void tearDown() throws Exception {
    super.tearDown();
  }

}
                                              ]]></source>
        <p>&#12384;&#12369;&#12393;&#12289;&#12371;&#12428;&#12414;&#12383;&#12467;&#12531;&#12497;&#12452;&#12523;&#12391;&#12365;&#12394;&#12356;&#12290;&#12381;&#12426;&#12419;&#12381;&#12358;&#12384;&#12290;JapaneseValidat</p>
        <source xml:space="preserve"><![CDATA[
package com.chikkun.common.validator;

public class JapaneseValidator {

  public JapaneseValidator() {
  }

  public boolean isKatakana(String katakana){
    
    return false;
  }
}
                                              ]]></source>
        <p>return false&#12395;&#12375;&#12383;&#12398;&#12399;&#12289;true&#12384;&#12392;&#12486;&#12473;&#12488;&#36890;&#12387;&#12385;&#12419;&#12358;&#12363;&#12425;&#12290;&#12373;&#12390;&#12289;&#19968;&#24230;&#21491;&#12463;&#12522;&#12483;&#12463;&#12391;JUnit&#12434;run&#12373;&#12379;&#12427;&#12392;&#12289;&#24403;&#28982;&#36890;&#12425;&#12394;&#12356;&#12290;&#12381;&#12371;&#12391;&#12289;&#23569;&#12375;&#26360;&#12365;&#25563;&#12360;&#12424;&#12358;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
package com.chikkun.common.validator;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.validator.GenericValidator;

public class JapaneseValidator {

  public JapaneseValidator() {
  }

  public boolean isKatakana(String katakana) {
    boolean result = true;
    //blank]]>&#12398;&#22580;&#21512;&#12399;<![CDATA[true(]]>&#12381;&#12358;&#12375;&#12394;&#12356;&#12392;&#12289;&#20837;&#21147;&#12364;&#12354;&#12387;&#12383;&#22580;&#21512;&#12395;&#12399;&#12459;&#12479;&#12459;&#12490;&#12392;&#12356;&#12358;&#12371;&#12392;&#12364;&#12391;&#12365;&#12394;&#12356;<![CDATA[)
    //]]>&#24517;&#38920;&#12391;&#12459;&#12479;&#12459;&#12490;&#12398;&#22580;&#21512;&#12399;<![CDATA[require]]>&#12391;<![CDATA[katakana]]>&#20001;&#26041;&#25351;&#23450;&#12377;&#12428;&#12400;&#12424;&#12356;&#12290;
<![CDATA[    if(GenericValidator.isBlankOrNull(katakana)){
      return result;
    }
    Pattern p = Pattern.compile("[\\p{InKatakana}]*");//
    Matcher matcher = p.matcher(katakana);
    result = matcher.matches();
    return result;
  }
}
                                              ]]></source>
        <p>&#12381;&#12435;&#12391;&#12289;&#23455;&#34892;&#12377;&#12427;&#12392;OK&#12290;&#12424;&#12358;&#12375;&#12289;&#12392;&#12356;&#12358;&#12371;&#12392;&#12391;&#12289;&#35519;&#23376;&#12406;&#12387;&#12371;&#12356;&#12390;&#12289;ValidateTest&#12434;&#22679;&#12420;&#12375;&#12390;&#12289;</p>
        <source xml:space="preserve"><![CDATA[
package com.chikkun.webcms.validate;

import junit.framework.TestCase;

import com.chikkun.common.validator.JapaneseValidator;

public class ValidateTest extends TestCase {

  JapaneseValidator val;
  public ValidateTest(String arg0) {
    super(arg0);
  }

  public void testKatakana(){
    this.assertTrue(val.isKatakana("]]>&#12469;&#12459;&#12452;&#12459;&#12474;&#12525;&#12454;<![CDATA["));
    this.assertTrue(val.isKatakana("]]>&#12510;&#12481;&#12515;&#12511;&#12481;&#12515;&#12531;<![CDATA["));
    this.assertTrue(val.isKatakana("]]>&#12510;&#12490;&#12502;&#12463;&#12531;<![CDATA["));
    this.assertTrue(val.isKatakana(""));
    this.assertTrue(val.isKatakana(null));
    this.assertFalse(val.isKatakana("]]>&#12373;&#12363;&#12356;&#12363;&#12378;&#12429;&#12358;<![CDATA["));
    this.assertFalse(val.isKatakana("]]>&#22338;&#20117;&#21644;&#37070;<![CDATA["));
    this.assertFalse(val.isKatakana("Sakai Kazuro"));
    this.assertFalse(val.isKatakana("]]>&#65403;&#65398;&#65394;&#65398;&#65405;&#65438;&#65435;&#65395;<![CDATA["));
    
  }

  protected void setUp() throws Exception {
    val = new JapaneseValidator();
    super.setUp();
  }

  protected void tearDown() throws Exception {
    super.tearDown();
  }

}
                                              ]]></source>
        <p>&#12371;&#12428;&#12391;&#23455;&#34892;&#12377;&#12427;&#12392;&#12289;&#12358;&#12414;&#12367;&#12356;&#12367;&#12435;&#12384;&#12394;&#12289;&#12371;&#12428;&#12364;&#12290;&#12521;&#12483;&#12461;&#12540;&#12290;</p>
        <p>&#12390;&#12394;&#12431;&#12369;&#12391;&#27671;&#12434;&#12424;&#12367;&#12375;&#12390;&#12289;&#27425;&#12395;&#21516;&#27096;&#12398;&#12300;&#12402;&#12425;&#12364;&#12394;&#12301;&#12481;&#12455;&#12483;&#12463;ValidatorTest&#12398;&#12513;&#12477;&#12483;&#12489;&#12392;&#12289;JapaneseValidator&#12398;&#12513;&#12477;&#12483;&#12489;&#12434;&#20316;&#25104;&#12289;&#12486;&#12473;&#12488;&#12434;&#23455;&#34892;!</p>
        <p>&#23455;&#38555;&#12395;&#12399;&#12356;&#12387;&#12410;&#12435;&#12395;&#12358;&#12414;&#12367;&#12356;&#12387;&#12383;&#12431;&#12369;&#12376;&#12419;&#12394;&#12367;&#12289;ValidateTest&#12398;assert&#12434;&#32771;&#12360;&#12394;&#12364;&#12425;&#12289;JapaneseValidator&#12398;&#12513;&#12477;&#12483;&#12489;&#12434;&#20462;&#27491;&#12375;&#12390;&#12289;&#23569;&#12375;&#12378;&#12388;&#23436;&#25104;&#12375;&#12390;&#12356;&#12367;&#12289;&#12392;&#12356;&#12358;&#24863;&#12376;&#12290;
          &#26178;&#12293;&#26412;&#20307;&#12398;JapaneseValidator&#12398;&#26041;&#12398;&#12513;&#12477;&#12483;&#12489;&#12434;&#12460;&#12531;&#12460;&#12531;&#26360;&#12356;&#12385;&#12419;&#12358;&#12371;&#12392;&#12364;&#12354;&#12427;&#12369;&#12428;&#12393;&#12289;&#26412;&#24403;&#12399;&#36991;&#12369;&#12383;&#26041;&#12364;&#33391;&#12356;&#12392;&#24605;&#12358;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/17
 *
 */
package com.chikkun.webcms.validate;

import junit.framework.TestCase;

import com.chikkun.common.validator.JapaneseValidator;

public class ValidateTest extends TestCase {

  JapaneseValidator val;
  public ValidateTest(String arg0) {
    super(arg0);
  }

  public void testKatakana(){
    this.assertTrue(val.isKatakana("]]>&#12469;&#12459;&#12452;&#12459;&#12474;&#12525;&#12454;<![CDATA["));
    this.assertTrue(val.isKatakana("]]>&#12510;&#12481;&#12515;&#12511;&#12481;&#12515;&#12531;<![CDATA["));
    this.assertTrue(val.isKatakana("]]>&#12510;&#12490;&#12502;&#12463;&#12531;<![CDATA["));
    this.assertTrue(val.isKatakana(""));
    this.assertTrue(val.isKatakana(null));

    this.assertFalse(val.isKatakana("]]>&#12373;&#12363;&#12356;&#12363;&#12378;&#12429;&#12358;<![CDATA["));
    this.assertFalse(val.isKatakana("]]>&#12373;&#12363;&#12356;&#21644;&#37070;<![CDATA["));
    this.assertFalse(val.isKatakana("]]>&#12469;&#12459;&#12452;&#21644;&#37070;<![CDATA["));
    this.assertFalse(val.isKatakana("]]>&#12469;&#12459;&#12452;&#12363;&#12378;&#12429;&#12358;<![CDATA["));
    this.assertFalse(val.isKatakana("]]>&#22338;&#20117;&#21644;&#37070;<![CDATA["));
    this.assertFalse(val.isKatakana("Sakai Kazuro"));
    this.assertFalse(val.isKatakana("]]>&#65403;&#65398;&#65394;&#65398;&#65405;&#65438;&#65435;&#65395;<![CDATA["));
    
  }


  public void testHiragana(){
    this.assertTrue(val.isHiragana("]]>&#12373;&#12363;&#12356;&#12363;&#12378;&#12429;&#12358;<![CDATA["));
    this.assertTrue(val.isHiragana("]]>&#12414;&#12373;&#12415;&#12385;&#12419;&#12435;<![CDATA["));
    this.assertTrue(val.isHiragana("]]>&#12414;&#12394;&#12406;&#12367;&#12435;<![CDATA["));
    this.assertTrue(val.isHiragana(""));
    this.assertTrue(val.isHiragana(null));

    this.assertFalse(val.isHiragana("]]>&#12469;&#12459;&#12452;&#12459;&#12474;&#12525;&#12454;<![CDATA["));
    this.assertFalse(val.isHiragana("]]>&#12373;&#12363;&#12356;&#21644;&#37070;<![CDATA["));
    this.assertFalse(val.isHiragana("]]>&#12469;&#12459;&#12452;&#21644;&#37070;<![CDATA["));
    this.assertFalse(val.isHiragana("]]>&#12469;&#12459;&#12452;&#12363;&#12378;&#12429;&#12358;<![CDATA["));
    this.assertFalse(val.isHiragana("]]>&#22338;&#20117;&#21644;&#37070;<![CDATA["));
    this.assertFalse(val.isHiragana("Sakai Kazuro"));
    this.assertFalse(val.isHiragana("]]>&#65403;&#65398;&#65394;&#65398;&#65405;&#65438;&#65435;&#65395;<![CDATA["));
  }

  public void testKanji(){
    this.assertTrue(val.isKanji("]]>&#22338;&#20117;&#21644;&#37070;<![CDATA["));
    this.assertTrue(val.isKanji("]]>&#23567;&#37326;&#38597;&#24051;<![CDATA["));
    this.assertTrue(val.isKanji("]]>&#20304;&#34276;&#23398;<![CDATA["));
    this.assertTrue(val.isKanji("]]>&#20124;&#21782;&#23043;&#38463;&#21696;&#24859;&#40657;<![CDATA["));
    this.assertTrue(val.isKanji(""));
    this.assertTrue(val.isKanji(null));

    this.assertFalse(val.isKanji("]]>&#12469;&#12459;&#12452;&#12459;&#12474;&#12525;&#12454;<![CDATA["));
    this.assertFalse(val.isKanji("]]>&#12373;&#12363;&#12356;&#21644;&#37070;<![CDATA["));
    this.assertFalse(val.isKanji("]]>&#12469;&#12459;&#12452;&#21644;&#37070;<![CDATA["));
    this.assertFalse(val.isKanji("]]>&#12469;&#12459;&#12452;&#12363;&#12378;&#12429;&#12358;<![CDATA["));
    this.assertFalse(val.isKanji("]]>&#22338;&#20117;&#12363;&#12378;&#12429;&#12358;<![CDATA["));
    this.assertFalse(val.isKanji("Sakai Kazuro"));
    this.assertFalse(val.isKanji("]]>&#65403;&#65398;&#65394;&#65398;&#65405;&#65438;&#65435;&#65395;<![CDATA["));
    this.assertFalse(val.isKanji("]]>&#9312;&#9313;&#9314;&#9315;<![CDATA["));
    this.assertFalse(val.isKanji("]]>&#65281;&#12300;&#12301;<![CDATA["));
    this.assertFalse(val.isKanji("]]>&#20189;&#12293;<![CDATA[÷]]>&#9794;<![CDATA["));
  }


  public void testZenkaku(){
    this.assertTrue(val.isZenkaku("]]>&#22338;&#20117;&#21644;&#37070;<![CDATA["));
    this.assertTrue(val.isZenkaku("]]>&#23567;&#37326;&#38597;&#24051;<![CDATA["));
    this.assertTrue(val.isZenkaku("]]>&#20304;&#34276;&#23398;<![CDATA["));
    this.assertTrue(val.isZenkaku("]]>&#20124;&#21782;&#23043;&#38463;&#21696;&#24859;&#40657;<![CDATA["));
    this.assertTrue(val.isZenkaku(""));
    this.assertTrue(val.isZenkaku(null));
    this.assertTrue(val.isZenkaku("]]>&#22338;&#20117;&#21644;&#37070;&#12394;&#12398;&#12384;<![CDATA["));
    this.assertTrue(val.isZenkaku("]]>&#23567;&#37326;&#38597;&#24051;&#12385;&#12419;&#12435;&#12394;&#12398;&#12384;<![CDATA["));
    this.assertTrue(val.isZenkaku("]]>&#65313;&#65314;&#65315;<![CDATA["));
    this.assertTrue(val.isZenkaku("]]>&#30010;&#30000;&#24066;&#40372;&#38291;&#65293;&#65297;&#65296;&#65297;&#65299;&#12540;&#65297;&#65296;&#12288;&#65324;&#65319;&#65315;&#65302;&#65296;&#65304;&#21495;<![CDATA["));
    this.assertTrue(val.isZenkaku("]]>&#20304;&#34276;&#23398;&#12490;&#12494;&#12480;<![CDATA["));
    this.assertTrue(val.isZenkaku("]]>&#20304;&#21407;&#24066;&#22823;&#20489;&#65303;&#65303;&#65305;&#65374;&#65298;&#65304;<![CDATA["));
    this.assertTrue(val.isZenkaku("]]>&#12356;&#12429;&#12399;&#12395;&#12411;&#12408;&#12392;&#12481;&#12522;&#12492;&#12523;&#12530;<![CDATA["));
    
    this.assertFalse(val.isZenkaku("]]>&#12300;&#22338;&#20117;&#21644;&#37070;&#12301;<![CDATA["));
    this.assertFalse(val.isZenkaku("]]>&#12469;&#12459;&#12452;&#12459;&#12474;&#12525;&#12454;<![CDATA[a"));
    this.assertFalse(val.isZenkaku("b]]>&#12373;&#12363;&#12356;&#21644;&#37070;<![CDATA["));
    this.assertFalse(val.isZenkaku("!!]]>&#12469;&#12459;&#12452;&#21644;&#37070;<![CDATA["));
    this.assertFalse(val.isZenkaku("]]>&#12469;&#12459;&#12452;&#65398;&#65405;&#65438;&#65435;&#65395;<![CDATA["));
    this.assertFalse(val.isZenkaku("]]>&#65403;&#65398;&#65394;&#12363;&#12378;&#12429;&#12358;<![CDATA["));
    this.assertFalse(val.isZenkaku("Sakai Kazuro"));
    this.assertFalse(val.isZenkaku("]]>&#65403;&#65398;&#65394;&#65398;&#65405;&#65438;&#65435;&#65395;<![CDATA["));
    this.assertFalse(val.isZenkaku("]]>&#9312;&#9313;&#9314;&#9315;<![CDATA["));
    this.assertFalse(val.isZenkaku("]]>&#20189;&#12293;<![CDATA[÷]]>&#9794;<![CDATA["));
  }

  protected void setUp() throws Exception {
    val = new JapaneseValidator();
    super.setUp();
  }

  protected void tearDown() throws Exception {
    super.tearDown();
  }

}
                                              ]]></source>
        <p>&#12392;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/17
 *
 */
package com.chikkun.common.validator;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.validator.GenericValidator;

/**
 * @author Chiku Kazuro
 * @version 0.1
 * ]]>&#26085;&#26412;&#35486;&#12398;<![CDATA[Validator]]>&#12364;&#12394;&#12356;&#12398;&#12391;&#33258;&#20316;&#12290;<![CDATA[<br>
 * ]]>&#12402;&#12425;&#12364;&#12394;&#12289;&#12459;&#12479;&#12459;&#12490;&#12289;&#28450;&#23383;&#12289;&#20840;&#35282;<![CDATA[(]]>&#19968;&#37096;&#12398;&#35352;&#21495;&#12375;&#12363;&#21547;&#12414;&#12394;&#12356;<![CDATA[)]]>&#12434;&#12481;&#12455;&#12483;&#12463;&#12391;&#12365;&#12427;&#12290;<![CDATA[<br>
 * ]]>&#12377;&#12409;&#12390;&#12289;<![CDATA[boolean]]>&#12434;&#36820;&#12377;&#12513;&#12477;&#12483;&#12489;&#12395;&#32113;&#19968;&#12290;
<![CDATA[ */
public class JapaneseValidator {

  /**
   * ]]>&#12487;&#12501;&#12457;&#12523;&#12488;&#12467;&#12531;&#12473;&#12488;&#12521;&#12463;&#12479;
<![CDATA[   */
  public JapaneseValidator() {
  }

  /**
   * ]]>&#12459;&#12479;&#12459;&#12490;&#12363;&#12393;&#12358;&#12363;&#12434;&#12481;&#12455;&#12483;&#12463;&#12377;&#12427;&#12290;
<![CDATA[   * @param katakana ]]>&#12481;&#12455;&#12483;&#12463;&#12375;&#12383;&#12356;&#25991;&#23383;&#21015;
<![CDATA[   * @return ]]>&#12459;&#12479;&#12459;&#12490;&#12384;&#12387;&#12383;&#12425;<![CDATA[true]]>&#12434;&#36820;&#12377;&#12290;
<![CDATA[   */
  public boolean isKatakana(String katakana) {
    boolean result = true;
    //blank]]>&#12398;&#22580;&#21512;&#12399;<![CDATA[true(]]>&#12381;&#12358;&#12375;&#12394;&#12356;&#12392;&#12289;&#20837;&#21147;&#12364;&#12354;&#12387;&#12383;&#22580;&#21512;&#12395;&#12399;&#12459;&#12479;&#12459;&#12490;&#12392;&#12356;&#12358;&#12371;&#12392;&#12364;&#12391;&#12365;&#12394;&#12356;<![CDATA[)
    //]]>&#24517;&#38920;&#12391;&#12459;&#12479;&#12459;&#12490;&#12398;&#22580;&#21512;&#12399;<![CDATA[require]]>&#12391;<![CDATA[katakana]]>&#20001;&#26041;&#25351;&#23450;&#12377;&#12428;&#12400;&#12424;&#12356;&#12290;
<![CDATA[    if(GenericValidator.isBlankOrNull(katakana)){
      return result;
    }
    Pattern p = Pattern.compile("[\\p{InKatakana}]*");//
    Matcher matcher = p.matcher(katakana);
    result = matcher.matches();
    return result;
  }

  /**
   * ]]>&#12402;&#12425;&#12364;&#12394;&#12363;&#12393;&#12358;&#12363;&#12434;&#12481;&#12455;&#12483;&#12463;&#12377;&#12427;&#12290;
<![CDATA[   * @param hiragana ]]>&#12481;&#12455;&#12483;&#12463;&#12375;&#12383;&#12356;&#25991;&#23383;&#21015;
<![CDATA[   * @return ]]>&#12402;&#12425;&#12364;&#12394;&#12398;&#22580;&#21512;<![CDATA[true]]>&#12434;&#36820;&#12377;&#12290;
<![CDATA[   */
  public boolean isHiragana(String hiragana) {
    boolean result = true;
    //blank]]>&#12398;&#22580;&#21512;&#12399;<![CDATA[true(]]>&#12381;&#12358;&#12375;&#12394;&#12356;&#12392;&#12289;&#20837;&#21147;&#12364;&#12354;&#12387;&#12383;&#22580;&#21512;&#12395;&#12399;&#12459;&#12479;&#12459;&#12490;&#12392;&#12356;&#12358;&#12371;&#12392;&#12364;&#12391;&#12365;&#12394;&#12356;<![CDATA[)
    //]]>&#24517;&#38920;&#12391;&#12459;&#12479;&#12459;&#12490;&#12398;&#22580;&#21512;&#12399;<![CDATA[require]]>&#12391;<![CDATA[katakana]]>&#20001;&#26041;&#25351;&#23450;&#12377;&#12428;&#12400;&#12424;&#12356;&#12290;
<![CDATA[    if(GenericValidator.isBlankOrNull(hiragana)){
      return result;
    }
    Pattern p = Pattern.compile("[\\p{InHiragana}]*");//
    Matcher matcher = p.matcher(hiragana);
    result = matcher.matches();
    return result;
  }

  /**
   * ]]>&#28450;&#23383;&#12363;&#12393;&#12358;&#12363;&#12434;&#12481;&#12455;&#12483;&#12463;&#12377;&#12427;&#12290;
<![CDATA[   * @param kanji ]]>&#12481;&#12455;&#12483;&#12463;&#12375;&#12383;&#12356;&#25991;&#23383;&#21015;
<![CDATA[   * @return ]]>&#28450;&#23383;&#12398;&#22580;&#21512;<![CDATA[true]]>&#12434;&#36820;&#12377;&#12290;
<![CDATA[   */
  public boolean isKanji(String kanji) {
    boolean result = true;
    //blank]]>&#12398;&#22580;&#21512;&#12399;<![CDATA[true(]]>&#12381;&#12358;&#12375;&#12394;&#12356;&#12392;&#12289;&#20837;&#21147;&#12364;&#12354;&#12387;&#12383;&#22580;&#21512;&#12395;&#12399;&#12459;&#12479;&#12459;&#12490;&#12392;&#12356;&#12358;&#12371;&#12392;&#12364;&#12391;&#12365;&#12394;&#12356;<![CDATA[)
    //]]>&#24517;&#38920;&#12391;&#12459;&#12479;&#12459;&#12490;&#12398;&#22580;&#21512;&#12399;<![CDATA[require]]>&#12391;<![CDATA[katakana]]>&#20001;&#26041;&#25351;&#23450;&#12377;&#12428;&#12400;&#12424;&#12356;&#12290;
<![CDATA[    if(GenericValidator.isBlankOrNull(kanji)){
      return result;
    }
    Pattern p = Pattern.compile("[\\p{InCJKUnifiedIdeographs}]*");//
    Matcher matcher = p.matcher(kanji);
    result = matcher.matches();
    return result;
  }
  /**
   * ]]>&#20840;&#35282;&#25991;&#23383;&#12363;&#12393;&#12358;&#12363;&#12434;&#12481;&#12455;&#12483;&#12463;&#12377;&#12427;&#12290;<![CDATA[<br>
   * ]]>&#12383;&#12384;&#12375;&#12371;&#12371;&#12391;&#12289;&#20840;&#35282;&#25991;&#23383;&#12399;&#12300;&#28450;&#23383;&#65291;&#12402;&#12425;&#12364;&#12394;&#65291;&#12459;&#12479;&#12459;&#12490;&#65291;&#20840;&#35282;&#12450;&#12523;&#12501;&#12449;&#12505;&#12483;&#12488;&#65291;&#20840;&#35282;&#25968;&#23383;&#65291;&#12300;&#12540;&#65293;&#65374;<![CDATA[3]]>&#12388;&#12398;&#35352;&#21495;&#12301;&#65291;&#20840;&#35282;&#12473;&#12506;&#12540;&#12473;&#12301;&#12290;
<![CDATA[   * @param zenkaku ]]>&#12481;&#12455;&#12483;&#12463;&#12375;&#12383;&#12356;&#25991;&#23383;&#21015;
<![CDATA[   * @return ]]>&#12402;&#12425;&#12364;&#12394;&#12398;&#22580;&#21512;<![CDATA[true]]>&#12434;&#36820;&#12377;&#12290;
<![CDATA[   */
  public boolean isZenkaku(String zenkaku) {
    boolean result = true;
    //blank]]>&#12398;&#22580;&#21512;&#12399;<![CDATA[true(]]>&#12381;&#12358;&#12375;&#12394;&#12356;&#12392;&#12289;&#20837;&#21147;&#12364;&#12354;&#12387;&#12383;&#22580;&#21512;&#12395;&#12399;&#12459;&#12479;&#12459;&#12490;&#12392;&#12356;&#12358;&#12371;&#12392;&#12364;&#12391;&#12365;&#12394;&#12356;<![CDATA[)
    //]]>&#24517;&#38920;&#12391;&#12459;&#12479;&#12459;&#12490;&#12398;&#22580;&#21512;&#12399;<![CDATA[require]]>&#12391;<![CDATA[katakana]]>&#20001;&#26041;&#25351;&#23450;&#12377;&#12428;&#12400;&#12424;&#12356;&#12290;
<![CDATA[    if(GenericValidator.isBlankOrNull(zenkaku)){
      return result;
    }
    Pattern p = Pattern.compile("[\\p{InKatakana}\\p{InHiragana}\\p{InCJKUnifiedIdeographs}]]>&#65313;<![CDATA[-]]>&#65338;&#65345;<![CDATA[-]]>&#65370;&#65296;<![CDATA[-]]>&#65305;&#12540;&#65293;&#65374;&#12288;<![CDATA[]*");//
    Matcher matcher = p.matcher(zenkaku);
    result = matcher.matches();
    return result;
  }

}
                                              ]]></source>
        <p>&#12392;&#12426;&#12354;&#12360;&#12378;&#12289;&#26085;&#26412;&#35486;&#38306;&#20418;&#12399;(&#12414;&#12384;&#32771;&#24942;&#12398;&#20313;&#22320;&#12399;&#12354;&#12427;&#12369;&#12428;&#12393;)&#12362;&#12356;&#12390;&#12362;&#12356;&#12390;&#12289;&#27425;&#12395;</p>
        <p>&#12362;&#12358;&#12289;&#12381;&#12358;&#12381;&#12358;&#12487;&#12540;&#12479;&#12434;&#20445;&#25345;&#12377;&#12427;Bean&#12434;&#20316;&#12387;&#12390;&#12356;&#12394;&#12363;&#12387;&#12383;&#12290;&#12371;&#12428;&#12418;&#20316;&#12387;&#12390;&#12362;&#12371;&#12358;&#12387;&#12392;(&#26412;&#26469;&#12399;&#20808;&#12395;Junit&#12363;&#12425;&#12363;&#12394;&#12354;?)&#20316;&#12427;&#12398;&#12364;&#38754;&#20498;&#12384;&#12363;&#12425;&#12289;
          &#26082;&#23384;&#12398;User&#12354;&#12383;&#12426;&#12434;&#12522;&#12501;&#12449;&#12463;&#12479;&#12522;&#12531;&#12464;(&#12392;&#12356;&#12387;&#12390;&#12418;&#12289;&#12497;&#12483;&#12465;&#12540;&#12472;&#12456;&#12463;&#12473;&#12503;&#12525;&#12540;&#12521;&#12391;ctrl-c&#12391;&#12467;&#12500;&#12540;&#12375;&#12390;&#12289;test&#12398;&#26041;&#12391;ctrl-v&#12391;&#12497;&#12483;&#12465;&#12540;&#12472;&#21517;&#12399;&#22793;&#12360;&#12390;&#12367;&#12428;&#12427;&#12384;&#12369;)&#12290;
          &#12467;&#12513;&#12531;&#12488;&#12420;&#12289;&#12356;&#12425;&#12394;&#12356;&#12501;&#12451;&#12540;&#12523;&#12489;&#12394;&#12393;&#12434;&#21066;&#38500;&#12375;&#12383;&#12418;&#12398;&#12364;&#19979;&#35352;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
package com.chikkun.webcms.validate;

import java.io.Serializable;
import java.util.Set;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
public class Staff implements Serializable {
    static final long serialVersionUID = -2539242534546127845L;
    private String quarter;
    private String loginName;
    private String pass;
    private String email;
    private String note;
    private String name;
    private String nameRead;
    public Staff(
        final String staffLoginName,
        final String staffPass,
        final String staffEmail,
        final String staffNote,
        final String staffFullName,
        final String staffFullNameRead,
        final Set staffRole_) {
        this.loginName = staffLoginName;
        this.pass = staffPass;
        this.email = staffEmail;
        this.note = staffNote;
        this.name = staffFullName;
        this.nameRead = staffFullNameRead;
    }
    public Staff() {
    }

    public final String getLoginName() {
        return loginName;
    }
    public final void setLoginName(final String loginName_) {
        this.loginName = loginName_;
    }
    public final String getPass() {
        return pass;
    }
    public final void setPass(final String pass_) {
        this.pass = pass_;
    }
    public final String getEmail() {
        return email;
    }
    public final void setEmail(final String email_) {
        this.email = email_;
    }
    public final String getNote() {
        return note;
    }
    public final void setNote(final String note_) {
        this.note = note_;
    }
    public final String getName() {
        return name;
    }
    public final void setName(final String name_) {
        this.name = name_;
    }
    public final String getNameRead() {
        return nameRead;
    }
    public final void setNameRead(final String nameRead_) {
        this.nameRead = nameRead_;
    }
    public final String getQuarter() {
      return this.quarter;
    }
    public final void setQuarter(final String quarter_) {
        this.quarter = quarter_;
    }
}
                                              ]]></source>
        <p>&#12381;&#12428;&#12391;&#12289;&#27425;&#12395;validator-rules.xml&#12434;&#29992;&#24847;&#12375;&#12390;&#12415;&#12424;&#12358;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE form-validation PUBLIC
     "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
     "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
     
<form-validation>
   <global>
      <validator name="int"
                 classname="com.chikkun.webcms.commons.MyValidator"
                 method="validateInt"
                 methodParams="java.lang.Object,org.apache.commons.validator.Field"
                 msg="errors.int"/>

      <validator name="required"
                 classname="com.chikkun.webcms.commons.MyValidator"
                 method="validateRequired"
                 methodParams="java.lang.Object,org.apache.commons.validator.Field"
                 msg="errors.required"/>
   </global>
   <formset>
     <form name="staff">
         <field property="loginName"  depends="required">
         	   <arg0 key="form.loginName.displayname"/>
         </field>    
         <field  property="pass" depends="required">
         	     <arg0 key="form.pass.displayname"/>
         </field>
         <field  property="note" depends="required,int">
         	     <arg0 key="form.note.displayname"/>
         </field>
      </form>
   </formset>   
</form-validation>
                                              ]]></source>
        <p>&#19978;&#35352;&#12434;&#35211;&#12428;&#12400;&#12431;&#12363;&#12427;&#12424;&#12358;&#12395;&#12289;&#12371;&#12428;&#12399;struts&#12395;&#12362;&#12369;&#12427;validator-rules.xml&#12392;validator.xml&#12398;&#20001;&#26041;&#12364;&#26360;&#12356;&#12390;&#12354;&#12427;&#12392;&#12356;&#12358;&#24863;&#12376;&#12290;&#12388;&#12414;&#12426;&#12289;global&#12391;&#23450;&#32681;&#12375;&#12289;fomrset&#12391;&#21508;
          validator&#12375;&#12383;&#12356;bean&#12392;&#12381;&#12398;&#26041;&#27861;&#12364;&#26360;&#12356;&#12390;&#12356;&#12427;&#12290;struts&#12391;&#12420;&#12387;&#12383;&#20154;&#12394;&#12425;&#23569;&#12394;&#12367;&#12392;&#12418;&#12289;formset&#12398;&#26041;&#12399;&#12362;&#12394;&#12376;&#12415;&#12290;</p>
        <p>&#12381;&#12371;&#12391;&#12289;&#20170;&#22238;&#12399;&#12289;&#19978;&#35352;&#12398;&#12424;&#12358;&#12395;</p>
        <ol>
          <li>loginName&#12364;&#24517;&#38920;(&#25991;&#23383;&#31561;&#12398;&#25351;&#23450;&#12394;&#12375;)</li>
          <li>pass&#12418;&#21516;&#27096;</li>
          <li>note&#12399;&#24517;&#38920;&#12391;&#19988;&#12388;&#25968;&#23383;(&#23455;&#38555;&#12398;&#20633;&#32771;&#12391;&#12399;&#12381;&#12435;&#12394;&#12371;&#12392;&#12399;&#12394;&#12356;&#12364;&#12289;&#12371;&#12371;&#12399;&#23455;&#39443;&#12392;&#12356;&#12358;&#12371;&#12392;&#12391;)</li>
        </ol>
        <p>&#12392;&#12356;&#12358;3&#12388;&#12395;&#12398;&#12501;&#12451;&#12540;&#12523;&#12489;&#12395;&#23550;&#12375;&#12390;validate&#12363;&#12369;&#12427;&#12290;</p>
        <p>&#12381;&#12375;&#12390;&#12289;&#19978;&#35352;&#12398;global&#12398;&#12463;&#12521;&#12473;&#21517;(com.chikkun.webcms.commons.MyValidator)&#12395;&#12354;&#12383;&#12426;&#12289;method(validateInt&#12394;&#12393;)
          &#12395;&#23550;&#12377;&#12427;&#12418;&#12398;&#12434;&#33258;&#20316;&#12377;&#12427;&#12371;&#12392;&#12395;&#12394;&#12427;&#12431;&#12369;&#12391;&#12377;&#12290;&#12381;&#12398;&#21069;&#12395;arg0&#12395;&#12354;&#12383;&#12427;&#12289;properties&#12434;&#20316;&#25104;&#12375;&#12414;&#12377;
          (java/com/chikkun/common/validation.properties)&#12290;native2ascii&#12364;&#38754;&#20498;&#12394;&#12398;&#12391;&#12289;&#12392;&#12426;&#12354;&#12360;&#12378;&#33521;&#35486;&#12391;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
# The error messages for the Validation Actions
errors.required=The {0} field is required.
errors.int=The {0} field is not an integer.

# The formatted names of the properties
form.loginName.displayname=Login Name
form.note.displayname=Note
                                              ]]></source>
        <p>&#12373;&#12390;&#12289;&#23455;&#38555;&#12398;&#12463;&#12521;&#12473;(MyValidator)&#12290;&#26368;&#21021;&#12399;&#12289;&#12414;&#12378;&#12399;&#12424;&#12367;&#20351;&#12356;&#12381;&#12358;&#12394;&#12289;&#12381;&#12375;&#12390;Commons Validator&#12395;&#26368;&#21021;&#12363;&#12425;&#12354;&#12427;&#12300;required&#12301;&#12392;&#12300;int&#12301;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/18
 *
 */
package com.chikkun.common;

import org.apache.commons.validator.Field;
import org.apache.commons.validator.GenericValidator;
import org.apache.commons.validator.util.ValidatorUtils;

public class MyValidator {

  public static boolean validateRequired(Object bean, Field field) {
    String value = ValidatorUtils.getValueAsString(bean, field.getProperty());

    return !GenericValidator.isBlankOrNull(value);
 }

  public static boolean validateInt(Object bean, Field field) {
    String value = ValidatorUtils.getValueAsString(bean, field.getProperty());

    return GenericValidator.isInt(value);
 }

}
                                              ]]></source>
        <p>&#12381;&#12375;&#12390;&#12289;&#12486;&#12473;&#12488;&#12465;&#12540;&#12473;&#12434;&#20316;&#25104;(&#23569;&#12293;&#25163;&#38918;&#12364;&#21453;&#23550;&#12395;&#12394;&#12387;&#12385;&#12419;&#12387;&#12383;&#12369;&#12393;)&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/18
 *
 */
package com.chikkun.webcms.validate;

import java.io.IOException;
import java.text.MessageFormat;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;

import junit.framework.TestCase;

import org.apache.commons.validator.Field;
import org.apache.commons.validator.Form;
import org.apache.commons.validator.Validator;
import org.apache.commons.validator.ValidatorAction;
import org.apache.commons.validator.ValidatorException;
import org.apache.commons.validator.ValidatorResources;
import org.apache.commons.validator.ValidatorResult;
import org.apache.commons.validator.ValidatorResults;

import com.chikkun.common.ValidatorLoader;

public class MyValidatorTest extends TestCase {

  public ValidatorLoader loader;

  public Staff staff;

  public Properties apps = null;

  public MyValidatorTest(String arg0) {
    super(arg0);
    try {
      loader = new ValidatorLoader();
      apps = loader.getProps();
    } catch (IOException err) {
      // TODO ]]>&#33258;&#21205;&#29983;&#25104;&#12373;&#12428;&#12383;<![CDATA[ catch ]]>&#12502;&#12525;&#12483;&#12463;
<![CDATA[      err.printStackTrace();
    }
  }

  public void testRequire() {
    ValidatorResources resources = null;
    resources = loader.getResources();
    Validator validator = new Validator(resources, "staff");
    validator.setOnlyReturnErrors(false);
    // Tell the validator which bean to validate against.
    validator.setParameter(Validator.BEAN_PARAM, staff);

    ValidatorResults results = null;
    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }
    printResults(staff, results, resources);
    Form form = resources.getForm(Locale.getDefault(), "staff");

    // ]]>&#12371;&#12371;&#12363;&#12425;&#23455;&#38555;&#12398;&#12486;&#12473;&#12488;&#12290;&#26368;&#21021;&#12399;&#12377;&#12409;&#12390;<![CDATA[null

    // loginName required
    Field field = form.getField("loginName");
    String prettyFieldName = apps.getProperty(field.getArg(0).getKey());

    assertEquals("properties]]>&#12398;&#21517;&#21069;<![CDATA[", prettyFieldName, "Login Name");
    ValidatorResult result = results.getValidatorResult("loginName");
    ValidatorAction action = resources.getValidatorAction("required");

    assertFalse(result.isValid("required"));

    String message = apps.getProperty(action.getMsg());
    Object[] args = {prettyFieldName};
    assertEquals("message", "The Login Name field is required.", MessageFormat
        .format(message, args));

    // pass required
    field = form.getField("pass");
    prettyFieldName = apps.getProperty(field.getArg(0).getKey());

    assertEquals("properties]]>&#12398;&#21517;&#21069;<![CDATA[", prettyFieldName, "Password");
    result = results.getValidatorResult("pass");
    action = resources.getValidatorAction("required");

    assertFalse(result.isValid("required"));

    message = apps.getProperty(action.getMsg());
    args[0] = prettyFieldName;
    assertEquals("message", "The Password field is required.", MessageFormat
        .format(message, args));

    // note required
    field = form.getField("note");
    prettyFieldName = apps.getProperty(field.getArg(0).getKey());

    assertEquals("properties]]>&#12398;&#21517;&#21069;<![CDATA[", prettyFieldName, "Note");
    result = results.getValidatorResult("note");
    action = resources.getValidatorAction("required");

    assertFalse(result.isValid("required"));

    message = apps.getProperty(action.getMsg());
    args[0] = prettyFieldName;
    assertEquals("message", "The Note field is required.", MessageFormat
        .format(message, args));

    // note int
    field = form.getField("note");
    prettyFieldName = apps.getProperty(field.getArg(0).getKey());

    assertEquals("properties]]>&#12398;&#21517;&#21069;<![CDATA[", prettyFieldName, "Note");
    result = results.getValidatorResult("note");
    action = resources.getValidatorAction("int");

    assertFalse(result.isValid("int"));

    message = apps.getProperty(action.getMsg());
    args[0] = prettyFieldName;
    assertEquals("message", "The Note field is not an integer.", MessageFormat
        .format(message, args));

    // ]]>&#26368;&#21021;&#12399;<![CDATA[loginName="sakai",pass="hogehoge",note="funifuni"
    // funifuni]]>&#12384;&#12369;&#12364;&#36890;&#12425;&#12394;&#12356;&#12399;&#12378;&#12290;
<![CDATA[    // loginName required

    staff.setLoginName("sakai");
    staff.setPass("hogehoge");
    staff.setNote("funifuni");

    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }
    printResults(staff, results, resources);
    form = resources.getForm(Locale.getDefault(), "staff");

    field = form.getField("loginName");
    result = results.getValidatorResult("loginName");
    assertTrue(result.isValid("required"));

    // pass required
    field = form.getField("pass");
    result = results.getValidatorResult("pass");
    assertTrue(result.isValid("required"));

    // note required
    field = form.getField("note");
    result = results.getValidatorResult("note");

    /*
     * ]]>&#12393;&#12358;&#12420;&#12425;&#12289;<![CDATA[ <field property="note" depends="required,int">
     * ]]>&#12398;&#12424;&#12358;&#12395;&#12289;<![CDATA[2]]>&#12388;&#20197;&#19978;<![CDATA[validator]]>&#12434;&#25351;&#23450;&#12375;&#12390;&#12356;&#12427;&#22580;&#21512;&#12399;&#12289;<![CDATA[ result.isValid("required")
     * ]]>&#21069;&#12398;&#12418;&#12398;&#12364;<![CDATA[pass]]>&#12375;&#12390;&#12356;&#12427;&#12392;&#12289;&#26368;&#24460;&#12398;&#12418;&#12398;&#12375;&#12363;&#21028;&#23450;&#12391;&#12365;&#12394;&#12356;&#12424;&#12358;&#12384;&#12290;
<![CDATA[     * ]]>&#12388;&#12414;&#12426;&#19978;&#35352;&#12398;&#22580;&#21512;&#12399;<![CDATA[(note)]]>&#12289;<![CDATA[note]]>&#12399;<![CDATA["funifuni"]]>&#12394;&#12398;&#12391;&#12289;<![CDATA[require]]>&#12399;&#12497;&#12473;&#12377;&#12427;&#12290;<![CDATA[ ]]>&#12375;&#12383;&#12364;&#12387;&#12390;&#12289;
<![CDATA[     * assertTrue(result.isValid("required")); ]]>&#12391;&#21028;&#23450;&#12375;&#12390;&#12418;&#12289;&#12358;&#12414;&#12367;&#12356;&#12363;&#12394;&#12356;&#12290;&#12497;&#12473;&#12375;&#12383;&#24460;&#12399;&#21028;&#23450;&#12391;&#12365;&#12394;&#12356;&#12424;&#12358;&#12384;&#12290;
<![CDATA[     * 
     */
    // note int
    assertFalse(result.isValid("note"));

    staff.setNote("123");

    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }
    result = results.getValidatorResult("note");

    Map actionMap = result.getActionMap();
    Iterator keys = actionMap.keySet().iterator();
    while (keys.hasNext()) {
      String actName = (String) keys.next();
      System.out.println(actName);
    }

    printResults(staff, results, resources);
    form = resources.getForm(Locale.getDefault(), "staff");

    assertTrue(result.isValid("int"));

    // ]]>&#12371;&#12428;&#12399;&#19978;&#35352;&#12398;&#36890;&#12426;&#12358;&#12414;&#12367;&#12356;&#12363;&#12394;&#12356;<![CDATA[!!
    // assertTrue(result.isValid("required"));

  }

  protected void setUp() throws Exception {
    super.setUp();

    staff = new Staff();

  }

  protected void tearDown() throws Exception {
    super.tearDown();
  }

  /**
   * ]]>&#12486;&#12473;&#12488;&#32080;&#26524;&#12434;&#34920;&#31034;&#12377;&#12427;&#12518;&#12540;&#12486;&#12451;&#12522;&#12486;&#12451;&#12513;&#12477;&#12483;&#12489;
<![CDATA[   * 
   * @param bean
   * @param results
   * @param resources
   */
  public void printResults(Staff bean, ValidatorResults results,
      ValidatorResources resources) {

    boolean success = true;

    // Start by getting the form for the current locale and Bean.
    Form form = resources.getForm(Locale.getDefault(), "staff");

    System.out.println("\n\nValidating:");
    System.out.println(bean);

    // Iterate over each of the properties of the Bean which had messages.
    Iterator propertyNames = results.getPropertyNames().iterator();

    while (propertyNames.hasNext()) {
      String propertyName = (String) propertyNames.next();

      // Get the Field associated with that property in the Form
      Field field = form.getField(propertyName);

      // Look up the formatted name of the field from the Field arg0
      String prettyFieldName = apps.getProperty(field.getArg(0).getKey());

      // Get the result of validating the property.
      ValidatorResult result = results.getValidatorResult(propertyName);

      // Get all the actions run against the property, and iterate over their
      // names.
      Map actionMap = result.getActionMap();
      Iterator keys = actionMap.keySet().iterator();
      while (keys.hasNext()) {
        String actName = (String) keys.next();

        // Get the Action for that name.
        ValidatorAction action = resources.getValidatorAction(actName);

        // If the result is valid, print PASSED, otherwise print FAILED
        System.out.println(propertyName + "[" + actName + "] ("
            + (result.isValid(actName) ? "PASSED" : "FAILED") + ")");

        // If the result failed, format the Action's message against the
        // formatted field name
        if (!result.isValid(actName)) {
          success = false;
          String message = apps.getProperty(action.getMsg());
          Object[] args = {prettyFieldName};
          System.out.println("     Error message will be: "
              + MessageFormat.format(message, args));

        }
      }
    }
    if (success) {
      System.out.println("FORM VALIDATION PASSED");
    } else {
      System.out.println("FORM VALIDATION FAILED");
    }

  }

}
                                              ]]></source>
        <p>&#19978;&#35352;&#12398;&#12477;&#12540;&#12473;&#12398;&#12467;&#12513;&#12531;&#12488;&#12395;&#12418;&#26360;&#12356;&#12390;&#12354;&#12427;&#12424;&#12358;&#12395;&#12289;&#33394;&#12293;&#12377;&#12387;&#12383;&#12418;&#12435;&#12384;&#12364;&#12354;&#12387;&#12383;&#12364;&#12289;&#12392;&#12426;&#12354;&#12360;&#12378;&#12486;&#12473;&#12488;&#12399;&#36890;&#12387;&#12383;&#12290;</p>
        <p>&#27425;&#12395;&#12289;&#33258;&#20316;&#12375;&#12383;&#26085;&#26412;&#35486;&#12398;JapanseValidator&#12434;&#36861;&#21152;&#12375;&#12424;&#12358;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/18
 *
 */
package com.chikkun.common;

import org.apache.commons.validator.Field;
import org.apache.commons.validator.GenericValidator;
import org.apache.commons.validator.util.ValidatorUtils;

import com.chikkun.common.validator.JapaneseValidator;

public class MyValidator {

  public static JapaneseValidator val =new JapaneseValidator();  
  
  public static boolean validateRequired(Object bean, Field field) {
    String value = ValidatorUtils.getValueAsString(bean, field.getProperty());

    return !GenericValidator.isBlankOrNull(value);
 }

  public static boolean validateInt(Object bean, Field field) {
    String value = ValidatorUtils.getValueAsString(bean, field.getProperty());

    return GenericValidator.isInt(value);
 }

  public static boolean validateKatakana(Object bean, Field field) {
    String value = ValidatorUtils.getValueAsString(bean, field.getProperty());

    return val.isKatakana(value);
  }

  public static boolean validateHiragana(Object bean, Field field) {
    String value = ValidatorUtils.getValueAsString(bean, field.getProperty());

    return val.isHiragana(value);
  }

  public static boolean validateKanji(Object bean, Field field) {
    String value = ValidatorUtils.getValueAsString(bean, field.getProperty());

    return val.isKanji(value);
  }

  public static boolean validateZenkaku(Object bean, Field field) {
    String value = ValidatorUtils.getValueAsString(bean, field.getProperty());

    return val.isZenkaku(value);
  }

}
                                              ]]></source>
        <p>&#12371;&#12428;&#12434;&#30331;&#37682;&#12377;&#12427;&#12383;&#12417;&#12398;validation.xml&#12398;global&#12392;&#12501;&#12451;&#12540;&#12523;&#12489;&#12481;&#12455;&#12483;&#12463;&#29992;&#12398;&#23450;&#32681;&#12434;&#36861;&#21152;&#12290;&#20170;&#22238;&#12399;&#19979;&#12395;&#12418;&#12354;&#12427;&#12424;&#12358;&#12395;&#12289;
          staff&#12398;name&#12364;&#28450;&#23383;&#12391;&#24517;&#38920;&#12289;quarter(&#37096;&#32626;)&#12364;&#12402;&#12425;&#12364;&#12394;&#12391;&#24517;&#38920;&#12289;nameRead(&#35501;&#12415;&#20206;&#21517;)&#12364;&#12459;&#12479;&#12459;&#12490;&#12391;&#24517;&#38920;&#12289;email&#12364;&#20840;&#35282;&#12391;&#24517;&#38920;&#12392;&#12356;&#12358;
          &#12371;&#12392;&#12395;&#12377;&#12427;(&#23455;&#38555;&#12392;&#12399;&#36949;&#12358;&#12369;&#12428;&#12393;)&#12290;</p>
        <source xml:space="preserve"><![CDATA[
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE form-validation PUBLIC
     "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
     "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
<form-validation>
   <global>
      <validator name="int"
                 classname="com.chikkun.common.MyValidator"
                 method="validateInt"
                 methodParams="java.lang.Object,org.apache.commons.validator.Field"
                 msg="errors.int"/>

      <validator name="required"
                 classname="com.chikkun.common.MyValidator"
                 method="validateRequired"
                 methodParams="java.lang.Object,org.apache.commons.validator.Field"
                 msg="errors.required"/>
      <validator name="katakana"
                 classname="com.chikkun.common.MyValidator"
                 method="validateKatakana"
                 methodParams="java.lang.Object,org.apache.commons.validator.Field"
                 msg="errors.katakana"/>
      <validator name="hiragana"
                 classname="com.chikkun.common.MyValidator"
                 method="validateHiragana"
                 methodParams="java.lang.Object,org.apache.commons.validator.Field"
                 msg="errors.hiragana"/>
      <validator name="kanji"
                 classname="com.chikkun.common.MyValidator"
                 method="validateKanji"
                 methodParams="java.lang.Object,org.apache.commons.validator.Field"
                 msg="errors.kanji"/>
      <validator name="zenkaku"
                 classname="com.chikkun.common.MyValidator"
                 method="validateZenkaku"
                 methodParams="java.lang.Object,org.apache.commons.validator.Field"
                 msg="errors.zenkaku"/>
   </global>
   <formset>
     <form name="staff">
         <field property="loginName"  depends="required">
         	   <arg0 key="form.loginName.displayname"/>
         </field>    
         <field  property="pass" depends="required">
         	     <arg0 key="form.pass.displayname"/>
         </field>
         <field  property="note" depends="required,int">
         	     <arg0 key="form.note.displayname"/>
         </field>
         <field  property="name" depends="required,kanji">
         	     <arg0 key="form.name.displayname"/>
         </field>
         <field  property="quarter" depends="required,hiragana">
         	     <arg0 key="form.quarter.displayname"/>
         </field>
         <field  property="nameRead" depends="required,katakana">
         	     <arg0 key="form.nameRead.displayname"/>
         </field>
         <field  property="email" depends="required,zenkaku">
         	     <arg0 key="form.email.displayname"/>
         </field>

      </form>
   </formset>   
</form-validation>
                                              ]]></source>
        <p>validation.properties&#12418;&#36861;&#21152;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
# The error messages for the Validation Actions
errors.required=The {0} field is required.
errors.int=The {0} field is not an integer.
errors.katakana=The {0} field is not a katakana.
errors.hiragana=The {0} field is not a hiragana.
errors.kanji=The {0} field is not a kanji.
errors.zenkaku=The {0} field is not a zenkaku.

# The formatted names of the properties
form.loginName.displayname=Login Name
form.pass.displayname=Password
form.note.displayname=Note
form.name.displayname=Name
form.quarter.displayname=Quarter
form.nameRead.displayname=Yomigana
form.email.displayname=Email
validator-pathnames=validator.xml
                                              ]]></source>
        <p>&#26368;&#24460;&#12395;&#12289;&#12486;&#12473;&#12488;&#12465;&#12540;&#12473;&#12398;&#36861;&#21152;(MyValidationTest.java)&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/18
 *
 */
package com.chikkun.webcms.validate;

import java.io.IOException;
import java.text.MessageFormat;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;

import junit.framework.TestCase;

import org.apache.commons.validator.Field;
import org.apache.commons.validator.Form;
import org.apache.commons.validator.Validator;
import org.apache.commons.validator.ValidatorAction;
import org.apache.commons.validator.ValidatorException;
import org.apache.commons.validator.ValidatorResources;
import org.apache.commons.validator.ValidatorResult;
import org.apache.commons.validator.ValidatorResults;

import com.chikkun.common.ValidatorLoader;

public class MyValidatorTest extends TestCase {

  public ValidatorLoader loader;

  public Staff staff;

  public Properties apps = null;

  public MyValidatorTest(String arg0) {
    super(arg0);
    try {
      loader = new ValidatorLoader();
      apps = loader.getProps();
    } catch (IOException err) {
      // TODO ]]>&#33258;&#21205;&#29983;&#25104;&#12373;&#12428;&#12383;<![CDATA[ catch ]]>&#12502;&#12525;&#12483;&#12463;
<![CDATA[      err.printStackTrace();
    }
  }

  public void testRequireAndInt() {
    ValidatorResources resources = null;
    resources = loader.getResources();
    Validator validator = new Validator(resources, "staff");
    validator.setOnlyReturnErrors(false);
    // Tell the validator which bean to validate against.
    validator.setParameter(Validator.BEAN_PARAM, staff);

    ValidatorResults results = null;
    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }
    printResults(staff, results, resources);
    Form form = resources.getForm(Locale.getDefault(), "staff");

    // ]]>&#12371;&#12371;&#12363;&#12425;&#23455;&#38555;&#12398;&#12486;&#12473;&#12488;&#12290;&#26368;&#21021;&#12399;&#12377;&#12409;&#12390;<![CDATA[null

    // loginName required
    Field field = form.getField("loginName");
    String prettyFieldName = apps.getProperty(field.getArg(0).getKey());

    assertEquals("properties]]>&#12398;&#21517;&#21069;<![CDATA[", prettyFieldName, "Login Name");
    ValidatorResult result = results.getValidatorResult("loginName");
    ValidatorAction action = resources.getValidatorAction("required");

    assertFalse(result.isValid("required"));

    String message = apps.getProperty(action.getMsg());
    Object[] args = {prettyFieldName};
    assertEquals("message", "The Login Name field is required.", MessageFormat
        .format(message, args));

    // pass required
    field = form.getField("pass");
    prettyFieldName = apps.getProperty(field.getArg(0).getKey());

    assertEquals("properties]]>&#12398;&#21517;&#21069;<![CDATA[", prettyFieldName, "Password");
    result = results.getValidatorResult("pass");
    action = resources.getValidatorAction("required");

    assertFalse(result.isValid("required"));

    message = apps.getProperty(action.getMsg());
    args[0] = prettyFieldName;
    assertEquals("message", "The Password field is required.", MessageFormat
        .format(message, args));

    // note required
    field = form.getField("note");
    prettyFieldName = apps.getProperty(field.getArg(0).getKey());

    assertEquals("properties]]>&#12398;&#21517;&#21069;<![CDATA[", prettyFieldName, "Note");
    result = results.getValidatorResult("note");
    action = resources.getValidatorAction("required");

    assertFalse(result.isValid("required"));

    message = apps.getProperty(action.getMsg());
    args[0] = prettyFieldName;
    assertEquals("message", "The Note field is required.", MessageFormat
        .format(message, args));

    // note int
    field = form.getField("note");
    prettyFieldName = apps.getProperty(field.getArg(0).getKey());

    assertEquals("properties]]>&#12398;&#21517;&#21069;<![CDATA[", prettyFieldName, "Note");
    result = results.getValidatorResult("note");
    action = resources.getValidatorAction("int");

    assertFalse(result.isValid("int"));

    message = apps.getProperty(action.getMsg());
    args[0] = prettyFieldName;
    assertEquals("message", "The Note field is not an integer.", MessageFormat
        .format(message, args));

    // ]]>&#26368;&#21021;&#12399;<![CDATA[loginName="sakai",pass="hogehoge",note="funifuni"
    // funifuni]]>&#12384;&#12369;&#12364;&#36890;&#12425;&#12394;&#12356;&#12399;&#12378;&#12290;
<![CDATA[    // loginName required

    staff.setLoginName("sakai");
    staff.setPass("hogehoge");
    staff.setNote("funifuni");

    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }
    printResults(staff, results, resources);
    form = resources.getForm(Locale.getDefault(), "staff");

    field = form.getField("loginName");
    result = results.getValidatorResult("loginName");
    assertTrue(result.isValid("required"));

    // pass required
    field = form.getField("pass");
    result = results.getValidatorResult("pass");
    assertTrue(result.isValid("required"));

    // note required
    field = form.getField("note");
    result = results.getValidatorResult("note");

    /*
     * ]]>&#12393;&#12358;&#12420;&#12425;&#12289;<![CDATA[ <field property="note" depends="required,int">
     * ]]>&#12398;&#12424;&#12358;&#12395;&#12289;<![CDATA[2]]>&#12388;&#20197;&#19978;<![CDATA[validator]]>&#12434;&#25351;&#23450;&#12375;&#12390;&#12356;&#12427;&#22580;&#21512;&#12399;&#12289;<![CDATA[ result.isValid("required")
     * ]]>&#21069;&#12398;&#12418;&#12398;&#12364;<![CDATA[pass]]>&#12375;&#12390;&#12356;&#12427;&#12392;&#12289;&#26368;&#24460;&#12398;&#12418;&#12398;&#12375;&#12363;&#21028;&#23450;&#12391;&#12365;&#12394;&#12356;&#12424;&#12358;&#12384;&#12290;
<![CDATA[     * ]]>&#12388;&#12414;&#12426;&#19978;&#35352;&#12398;&#22580;&#21512;&#12399;<![CDATA[(note)]]>&#12289;<![CDATA[note]]>&#12399;<![CDATA["funifuni"]]>&#12394;&#12398;&#12391;&#12289;<![CDATA[require]]>&#12399;&#12497;&#12473;&#12377;&#12427;&#12290;<![CDATA[ ]]>&#12375;&#12383;&#12364;&#12387;&#12390;&#12289;
<![CDATA[     * assertTrue(result.isValid("required")); ]]>&#12391;&#21028;&#23450;&#12375;&#12390;&#12418;&#12289;&#12358;&#12414;&#12367;&#12356;&#12363;&#12394;&#12356;&#12290;&#12497;&#12473;&#12375;&#12383;&#24460;&#12399;&#21028;&#23450;&#12391;&#12365;&#12394;&#12356;&#12424;&#12358;&#12384;&#12290;
<![CDATA[     * 
     */
    // note int
    assertFalse(result.isValid("note"));

    staff.setNote("123");

    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }
    result = results.getValidatorResult("note");

    Map actionMap = result.getActionMap();
    Iterator keys = actionMap.keySet().iterator();
    while (keys.hasNext()) {
      String actName = (String) keys.next();
      System.out.println(actName);
    }

    printResults(staff, results, resources);
    form = resources.getForm(Locale.getDefault(), "staff");

    assertTrue(result.isValid("int"));

    // ]]>&#12371;&#12428;&#12399;&#19978;&#35352;&#12398;&#36890;&#12426;&#12358;&#12414;&#12367;&#12356;&#12363;&#12394;&#12356;<![CDATA[!!
    // assertTrue(result.isValid("required"));

  }

  public void testJapanese() {
    ValidatorResources resources = null;
    resources = loader.getResources();
    Validator validator = new Validator(resources, "staff");
    validator.setOnlyReturnErrors(false);
    // Tell the validator which bean to validate against.
    validator.setParameter(Validator.BEAN_PARAM, staff);

    ValidatorResults results = null;
    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }
    printResults(staff, results, resources);
    Form form = resources.getForm(Locale.getDefault(), "staff");

    // ]]>&#26368;&#21021;&#12399;<![CDATA[null]]>&#12398;&#12414;&#12414;&#12394;&#12398;&#12391;&#12377;&#12409;&#12390;<![CDATA[required]]>&#12391;&#24341;&#12387;&#12363;&#12363;&#12427;
<![CDATA[    // name required
    Field field = form.getField("name");
    String prettyFieldName = apps.getProperty(field.getArg(0).getKey());

    assertEquals("properties]]>&#12398;&#21517;&#21069;<![CDATA[", prettyFieldName, "Name");
    ValidatorResult result = results.getValidatorResult("name");
    ValidatorAction action = resources.getValidatorAction("required");

    assertFalse(result.isValid("required"));

    String message = apps.getProperty(action.getMsg());
    Object[] args = {prettyFieldName};
    assertEquals("message", "The Name field is required.", MessageFormat
        .format(message, args));

    // nameRead required
    field = form.getField("nameRead");
    prettyFieldName = apps.getProperty(field.getArg(0).getKey());

    assertEquals("properties]]>&#12398;&#21517;&#21069;<![CDATA[", prettyFieldName, "Yomigana");
    result = results.getValidatorResult("nameRead");
    action = resources.getValidatorAction("required");

    assertFalse(result.isValid("required"));

    message = apps.getProperty(action.getMsg());
    args[0] = prettyFieldName;
    assertEquals("message", "The Yomigana field is required.", MessageFormat
        .format(message, args));

    // quarter required
    field = form.getField("quarter");
    prettyFieldName = apps.getProperty(field.getArg(0).getKey());

    assertEquals("properties]]>&#12398;&#21517;&#21069;<![CDATA[", prettyFieldName, "Quarter");
    result = results.getValidatorResult("quarter");
    action = resources.getValidatorAction("required");

    assertFalse(result.isValid("required"));

    message = apps.getProperty(action.getMsg());
    args[0] = prettyFieldName;
    assertEquals("message", "The Quarter field is required.", MessageFormat
        .format(message, args));

    // nameRead required
    field = form.getField("email");
    prettyFieldName = apps.getProperty(field.getArg(0).getKey());

    assertEquals("properties]]>&#12398;&#21517;&#21069;<![CDATA[", prettyFieldName, "Email");
    result = results.getValidatorResult("email");
    action = resources.getValidatorAction("required");

    assertFalse(result.isValid("required"));

    message = apps.getProperty(action.getMsg());
    args[0] = prettyFieldName;
    assertEquals("message", "The Email field is required.", MessageFormat
        .format(message, args));

    // ]]>&#21069;&#12398;&#12399;&#36890;&#12427;&#12424;&#12358;&#12395;&#12290;
<![CDATA[    staff.setLoginName("sakai");
    staff.setPass("hogehoge");
    staff.setNote("123");
    // ]]>&#12392;&#12426;&#12354;&#12360;&#12378;&#12289;<![CDATA[staff]]>&#12395;&#20516;&#12434;&#20837;&#12428;&#12427;&#12364;&#12377;&#12409;&#12390;&#12289;&#12450;&#12473;&#12461;&#12540;
<![CDATA[    staff.setName("sakai");
    staff.setNameRead("sakai");
    staff.setQuarter("jinji");
    staff.setEmail("abcdefg");

    results = null;

    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }
    printResults(staff, results, resources);

    field = form.getField("name");
    prettyFieldName = apps.getProperty(field.getArg(0).getKey());
    action = resources.getValidatorAction("kanji");
    message = apps.getProperty(action.getMsg());
    args[0] = prettyFieldName;
    assertEquals("message", "The Name field is not a kanji.", MessageFormat
        .format(message, args));
    result = results.getValidatorResult("name");
    assertFalse(result.isValid("kanji"));

    field = form.getField("nameRead");
    prettyFieldName = apps.getProperty(field.getArg(0).getKey());
    action = resources.getValidatorAction("katakana");
    message = apps.getProperty(action.getMsg());
    args[0] = prettyFieldName;
    assertEquals("message", "The Yomigana field is not a katakana.",
        MessageFormat.format(message, args));
    result = results.getValidatorResult("nameRead");
    assertFalse(result.isValid("katakana"));

    field = form.getField("email");
    prettyFieldName = apps.getProperty(field.getArg(0).getKey());
    action = resources.getValidatorAction("zenkaku");
    message = apps.getProperty(action.getMsg());
    args[0] = prettyFieldName;
    assertEquals("message", "The Email field is not a zenkaku.", MessageFormat
        .format(message, args));
    result = results.getValidatorResult("email");
    assertFalse(result.isValid("zenkaku"));

    field = form.getField("quarter");
    prettyFieldName = apps.getProperty(field.getArg(0).getKey());
    action = resources.getValidatorAction("hiragana");
    message = apps.getProperty(action.getMsg());
    args[0] = prettyFieldName;
    assertEquals("message", "The Quarter field is not a hiragana.",
        MessageFormat.format(message, args));
    result = results.getValidatorResult("quarter");
    assertFalse(result.isValid("hiragana"));

    // ]]>&#12392;&#12426;&#12354;&#12360;&#12378;&#12289;<![CDATA[staff]]>&#12395;&#20516;&#12434;&#20837;&#12428;&#12427;&#12364;&#12377;&#12409;&#12390;&#12289;&#12450;&#12473;&#12461;&#12540;
<![CDATA[    staff.setName("]]>&#22338;&#20117;&#21644;&#37070;<![CDATA[");
    staff.setNameRead("]]>&#12469;&#12459;&#12452;&#12459;&#12474;&#12525;&#12454;<![CDATA[");
    staff.setQuarter("]]>&#12376;&#12435;&#12376;<![CDATA[");
    staff.setEmail("]]>&#12469;&#12459;&#12452;&#22338;&#20117;&#12373;&#12363;&#12356;<![CDATA[");

    results = null;

    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }
    printResults(staff, results, resources);

    result = results.getValidatorResult("name");
    assertTrue(result.isValid("kanji"));

    result = results.getValidatorResult("nameRead");
    assertTrue(result.isValid("katakana"));

    result = results.getValidatorResult("email");
    assertTrue(result.isValid("zenkaku"));

    result = results.getValidatorResult("quarter");
    assertTrue(result.isValid("hiragana"));
  }

  protected void setUp() throws Exception {
    super.setUp();

    staff = new Staff();

  }

  protected void tearDown() throws Exception {
    super.tearDown();
  }

  /**
   * ]]>&#12486;&#12473;&#12488;&#32080;&#26524;&#12434;&#34920;&#31034;&#12377;&#12427;&#12518;&#12540;&#12486;&#12451;&#12522;&#12486;&#12451;&#12513;&#12477;&#12483;&#12489;
<![CDATA[   * 
   * @param bean
   * @param results
   * @param resources
   */
  public void printResults(Staff bean, ValidatorResults results,
      ValidatorResources resources) {

    boolean success = true;

    // Start by getting the form for the current locale and Bean.
    Form form = resources.getForm(Locale.getDefault(), "staff");

    System.out.println("\n\nValidating:");
    System.out.println(bean);

    // Iterate over each of the properties of the Bean which had messages.
    Iterator propertyNames = results.getPropertyNames().iterator();

    while (propertyNames.hasNext()) {
      String propertyName = (String) propertyNames.next();

      // Get the Field associated with that property in the Form
      Field field = form.getField(propertyName);

      // Look up the formatted name of the field from the Field arg0
      String prettyFieldName = apps.getProperty(field.getArg(0).getKey());

      // Get the result of validating the property.
      ValidatorResult result = results.getValidatorResult(propertyName);

      // Get all the actions run against the property, and iterate over their
      // names.
      Map actionMap = result.getActionMap();
      Iterator keys = actionMap.keySet().iterator();
      while (keys.hasNext()) {
        String actName = (String) keys.next();

        // Get the Action for that name.
        ValidatorAction action = resources.getValidatorAction(actName);

        // If the result is valid, print PASSED, otherwise print FAILED
        System.out.println(propertyName + "[" + actName + "] ("
            + (result.isValid(actName) ? "PASSED" : "FAILED") + ")");

        // If the result failed, format the Action's message against the
        // formatted field name
        if (!result.isValid(actName)) {
          success = false;
          String message = apps.getProperty(action.getMsg());
          Object[] args = {prettyFieldName};
          System.out.println("     Error message will be: "
              + MessageFormat.format(message, args));

        }
      }
    }
    if (success) {
      System.out.println("FORM VALIDATION PASSED");
    } else {
      System.out.println("FORM VALIDATION FAILED");
    }

  }

}
                                              ]]></source>
        <p>&#12393;&#12358;&#12420;&#12425;&#12289;&#19968;&#24540;&#12486;&#12473;&#12488;&#12395;&#36890;&#12387;&#12383;&#12290;</p>
        <p>&#27425;&#12395;&#12377;&#12391;&#12395;&#12354;&#12427;Commons&#12418;&#20351;&#12360;&#12427;&#12424;&#12358;&#12395;&#12289;MyValidator&#12392;&#12399;&#21029;&#12395;FieldCheck.java&#20316;&#25104;&#12375;&#12289;validator.xml&#12398;&#36861;&#21152;&#12434;&#34892;&#12358;&#12290;&#12388;&#12356;&#12391;&#12395;&#12289;int&#12392;required&#12418;&#33258;&#20316;&#12376;&#12419;&#12394;&#12356;&#12398;&#12391;&#12289;
            FeieldCheck.java&#12395;&#31227;&#12381;&#12358;&#12290;<em>&#12371;&#12435;&#12394;&#12392;&#12365;Junit&#12434;&#20316;&#25104;&#12375;&#12390;&#12362;&#12367;&#12392;&#12289;&#31777;&#21336;&#12395;&#12481;&#12455;&#12483;&#12463;&#12391;&#12365;&#12427;&#12363;&#12425;&#20415;&#21033;&#12384;</em>&#12290;</p>
        <p>&#12414;&#12378;&#12399;FieldCheck.java&#12363;&#12425;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
package com.chikkun.common.validator;

import java.io.Serializable;
import java.util.Date;
import java.util.Locale;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.validator.Field;
import org.apache.commons.validator.GenericTypeValidator;
import org.apache.commons.validator.GenericValidator;
import org.apache.commons.validator.util.ValidatorUtils;

public class FieldCheck implements Serializable {

  /**
   * Commons Logging instance.
   */
  private static final Log log = LogFactory.getLog(FieldCheck.class);

  public static final String FIELD_TEST_NULL = "NULL";

  public static final String FIELD_TEST_NOTNULL = "NOTNULL";

  public static final String FIELD_TEST_EQUAL = "EQUAL";

  public static boolean validateRequired(Object bean, Field field) {

    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    return !GenericValidator.isBlankOrNull(value);

  }

  public static boolean validateMask(Object bean, Field field) {

    String mask = field.getVarValue("mask");
    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    try {
      if (!GenericValidator.isBlankOrNull(value)
          && !GenericValidator.matchRegexp(value, mask)) {
        return false;
      } else {
        return true;
      }
    } catch (Exception e) {
      log.error(e.getMessage(), e);
    }
    return true;
  }

  public static boolean validateInteger(Object bean, Field field) {
    boolean result = false;
    Integer num = null;
    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      num = GenericTypeValidator.formatInt(value);
    }

    if (num != null) {
      result = true;
    }
    return result;
  }

  public static Long validateLong(Object bean, Field field) {
    Long result = null;
    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      result = GenericTypeValidator.formatLong(value);
    }

    return result;
  }

  public static Float validateFloat(Object bean, Field field) {
    Float result = null;
    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      result = GenericTypeValidator.formatFloat(value);
    }

    return result;
  }

  public static Double validateDouble(Object bean, Field field) {
    Double result = null;
    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      result = GenericTypeValidator.formatDouble(value);

    }

    return result;
  }

  public static Date validateDate(Object bean, Field field) {

    Date result = null;
    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }
    String datePattern = field.getVarValue("datePattern");
    String datePatternStrict = field.getVarValue("datePatternStrict");
    Locale locale = Locale.getDefault();
    if (!GenericValidator.isBlankOrNull(value)) {
      try {
        if (datePattern != null && datePattern.length() > 0) {
          result = GenericTypeValidator.formatDate(value, datePattern, false);
        } else if (datePatternStrict != null && datePatternStrict.length() > 0) {
          result = GenericTypeValidator.formatDate(value, datePatternStrict,
              true);
        } else {
          result = GenericTypeValidator.formatDate(value, locale);
        }
      } catch (Exception e) {
        log.error(e.getMessage(), e);
      }

    }

    return result;
  }

  public static boolean validateIntRange(Object bean, Field field) {

    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      try {
        int intValue = Integer.parseInt(value);
        int min = Integer.parseInt(field.getVarValue("min"));
        int max = Integer.parseInt(field.getVarValue("max"));

        if (!GenericValidator.isInRange(intValue, min, max)) {
          return false;
        }
      } catch (Exception e) {
        return false;
      }
    }

    return true;
  }

  public static boolean validateDoubleRange(Object bean, Field field) {

    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      try {
        double doubleValue = Double.parseDouble(value);
        double min = Double.parseDouble(field.getVarValue("min"));
        double max = Double.parseDouble(field.getVarValue("max"));

        if (!GenericValidator.isInRange(doubleValue, min, max)) {
          return false;
        }
      } catch (Exception e) {
        return false;
      }
    }

    return true;
  }

  public static boolean validateFloatRange(Object bean, Field field) {

    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      try {
        float floatValue = Float.parseFloat(value);
        float min = Float.parseFloat(field.getVarValue("min"));
        float max = Float.parseFloat(field.getVarValue("max"));

        if (!GenericValidator.isInRange(floatValue, min, max)) {

          return false;
        }
      } catch (Exception e) {
        return false;
      }
    }

    return true;
  }

  public static Long validateCreditCard(Object bean, Field field) {

    Long result = null;
    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      result = GenericTypeValidator.formatCreditCard(value);

    }

    return result;
  }

  public static boolean validateEmail(Object bean, Field field) {

    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)
        && !GenericValidator.isEmail(value)) {
      return false;
    } else {
      return true;
    }
  }

  public static boolean validateMaxLength(Object bean, Field field) {

    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (value != null) {
      try {
        int max = Integer.parseInt(field.getVarValue("maxlength"));

        if (!GenericValidator.maxLength(value, max)) {
          return false;
        }
      } catch (Exception e) {
        return false;
      }
    }

    return true;
  }

  public static boolean validateMinLength(Object bean, Field field) {

    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      try {
        int min = Integer.parseInt(field.getVarValue("minlength"));

        if (!GenericValidator.minLength(value, min)) {
          return false;
        }
      } catch (Exception e) {
        return false;
      }
    }

    return true;
  }


  protected static boolean isString(Object o) {
    return (o == null) ? true : String.class.isInstance(o);
  }

}
                                              ]]></source>
        <p>&#27425;&#12399;validation.xml&#12408;&#12398;&#36861;&#21152;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE form-validation PUBLIC
     "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1//EN"
     "http://jakarta.apache.org/commons/dtds/validator_1_1.dtd">
<form-validation>
   <global>
      <validator name="int"
                 classname="com.chikkun.common.validator.FieldCheck"
                 method="validateInt"
                 methodParams="java.lang.Object,org.apache.commons.validator.Field"
                 msg="errors.int"/>

      <validator name="required"
                 classname="com.chikkun.common.validator.FieldCheck"
                 method="validateRequired"
                 methodParams="java.lang.Object,org.apache.commons.validator.Field"
                 msg="errors.required"/>
      <validator name="katakana"
                 classname="com.chikkun.common.validator.MyValidator"
                 method="validateKatakana"
                 methodParams="java.lang.Object,org.apache.commons.validator.Field"
                 msg="errors.katakana"/>
      <validator name="hiragana"
                 classname="com.chikkun.common.validator.MyValidator"
                 method="validateHiragana"
                 methodParams="java.lang.Object,org.apache.commons.validator.Field"
                 msg="errors.hiragana"/>
      <validator name="kanji"
                 classname="com.chikkun.common.validator.MyValidator"
                 method="validateKanji"
                 methodParams="java.lang.Object,org.apache.commons.validator.Field"
                 msg="errors.kanji"/>
      <validator name="zenkaku"
                 classname="com.chikkun.common.validator.MyValidator"
                 method="validateZenkaku"
                 methodParams="java.lang.Object,org.apache.commons.validator.Field"
                 msg="errors.zenkaku"/>
      <validator name="mask"
            classname="com.chikkun.common.validator.FieldCheck"
               method="validateMask"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.Field"
                  msg="errors.invalid"/>
      <validator name="integer"
            classname="com.chikkun.common.validator.FieldCheck"
               method="validateInteger"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.Field"
                  msg="errors.integer"/>
      <validator name="long"
            classname="com.chikkun.common.validator.FieldCheck"
               method="validateLong"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.Field"
                  msg="errors.long"/>
      <validator name="float"
            classname="com.chikkun.common.validator.FieldCheck"
               method="validateFloat"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.Field"
                  msg="errors.float"/>

      <validator name="double"
            classname="com.chikkun.common.validator.FieldCheck"
               method="validateDouble"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.Field"
                  msg="errors.double"/>
      <validator name="date"
            classname="com.chikkun.common.validator.FieldCheck"
               method="validateDate"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.Field"
                  msg="errors.date"/>
      <validator name="intRange"
            classname="com.chikkun.common.validator.FieldCheck"
               method="validateIntRange"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.Field"
              depends="integer"
                  msg="errors.range"/>
      <validator name="floatRange"
            classname="com.chikkun.common.validator.FieldCheck"
               method="validateFloatRange"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages"
              depends="float"
                  msg="errors.range"/>
      <validator name="doubleRange"
            classname="com.chikkun.common.validator.FieldCheck"
               method="validateDoubleRange"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.Field"
              depends="double"
                  msg="errors.range"/>
      <validator name="creditCard"
            classname="com.chikkun.common.validator.FieldCheck"
               method="validateCreditCard"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.Field"
                  msg="errors.creditcard"/>
      <validator name="email"
            classname="com.chikkun.common.validator.FieldCheck"
               method="validateEmail"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.Field"
              depends=""
                  msg="errors.email"/>
      <validator name="url"
            classname="com.chikkun.common.validator.FieldCheck"
               method="validateUrl"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.Field"
              depends=""
                  msg="errors.url"/>
      <validator name="minlength"
            classname="com.chikkun.common.validator.FieldCheck"
               method="validateMinLength"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.Field"
              depends=""
                  msg="errors.minlength"/>
      <validator name="maxlength"
            classname="com.chikkun.common.validator.FieldCheck"
               method="validateMaxLength"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.Field"
              depends=""
                  msg="errors.maxlength"/>

   </global>
   <formset>
     <form name="staff">
         <field property="loginName"  depends="required">
         	   <arg0 key="form.loginName.displayname"/>
         </field>    
         <field  property="pass" depends="required">
         	     <arg0 key="form.pass.displayname"/>
         </field>
         <field  property="note" depends="required,int">
         	     <arg0 key="form.note.displayname"/>
         </field>
         <field  property="name" depends="required,kanji">
         	     <arg0 key="form.name.displayname"/>
         </field>
         <field  property="quarter" depends="required,hiragana">
         	     <arg0 key="form.quarter.displayname"/>
         </field>
         <field  property="nameRead" depends="required,katakana">
         	     <arg0 key="form.nameRead.displayname"/>
         </field>
         <field  property="email" depends="required,zenkaku">
         	     <arg0 key="form.email.displayname"/>
         </field>
      </form>
   <formset>
     <form name="commons">
         <field property="loginName"  depends="url">
         	   <arg0 key="form.loginName.displayname"/>
         </field>    
         <field  property="pass" depends="mask">
         	     <arg0 key="form.pass.displayname"/>
         </field>
         <field  property="note" depends="date">
         	     <arg0 key="form.note.displayname"/>
         </field>
         <field  property="email" depends="email">
         	     <arg0 key="form.email.displayname"/>
         </field>
      </form>

   </formset>   
</form-validation>
                                              ]]></source>
        <p>&#27425;&#12399;FieldCheck.java</p>
        <source xml:space="preserve"><![CDATA[
package com.chikkun.common.validator;

import java.io.Serializable;
import java.util.Date;
import java.util.Locale;
import java.util.StringTokenizer;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.validator.Field;
import org.apache.commons.validator.GenericTypeValidator;
import org.apache.commons.validator.GenericValidator;
import org.apache.commons.validator.UrlValidator;
import org.apache.commons.validator.util.ValidatorUtils;
import org.apache.struts.validator.Resources;

public class FieldCheck implements Serializable {

  /**
   * Commons Logging instance.
   */
  private static final Log log = LogFactory.getLog(FieldCheck.class);

  public static final String FIELD_TEST_NULL = "NULL";

  public static final String FIELD_TEST_NOTNULL = "NOTNULL";

  public static final String FIELD_TEST_EQUAL = "EQUAL";

  public static boolean validateRequired(Object bean, Field field) {

    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    return !GenericValidator.isBlankOrNull(value);
  }

  public static boolean validateInt(Object bean, Field field) {
    String value = ValidatorUtils.getValueAsString(bean, field.getProperty());

    return GenericValidator.isInt(value);
  }

  public static boolean validateMask(Object bean, Field field) {

    String mask = field.getVarValue("mask");
    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    try {
      if (!GenericValidator.isBlankOrNull(value)
          && !GenericValidator.matchRegexp(value, mask)) {
        return false;
      } else {
        return true;
      }
    } catch (Exception e) {
      log.error(e.getMessage(), e);
    }
    return true;
  }

  public static boolean validateInteger(Object bean, Field field) {
    boolean result = false;
    Integer num = null;
    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      num = GenericTypeValidator.formatInt(value);
    }

    if (num != null) {
      result = true;
    }
    return result;
  }

  public static Long validateLong(Object bean, Field field) {
    Long result = null;
    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      result = GenericTypeValidator.formatLong(value);
    }

    return result;
  }

  public static Float validateFloat(Object bean, Field field) {
    Float result = null;
    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      result = GenericTypeValidator.formatFloat(value);
    }

    return result;
  }

  public static Double validateDouble(Object bean, Field field) {
    Double result = null;
    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      result = GenericTypeValidator.formatDouble(value);

    }

    return result;
  }

  public static Date validateDate(Object bean, Field field) {

    Date result = null;
    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }
    String datePattern = field.getVarValue("datePattern");
    String datePatternStrict = field.getVarValue("datePatternStrict");
    Locale locale = Locale.getDefault();
    if (!GenericValidator.isBlankOrNull(value)) {
      try {
        if (datePattern != null && datePattern.length() > 0) {
          result = GenericTypeValidator.formatDate(value, datePattern, false);
        } else if (datePatternStrict != null && datePatternStrict.length() > 0) {
          result = GenericTypeValidator.formatDate(value, datePatternStrict,
              true);
        } else {
          result = GenericTypeValidator.formatDate(value, locale);
        }
      } catch (Exception e) {
        log.error(e.getMessage(), e);
      }

    }

    return result;
  }

  public static boolean validateIntRange(Object bean, Field field) {

    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      try {
        int intValue = Integer.parseInt(value);
        int min = Integer.parseInt(field.getVarValue("min"));
        int max = Integer.parseInt(field.getVarValue("max"));

        if (!GenericValidator.isInRange(intValue, min, max)) {
          return false;
        }
      } catch (Exception e) {
        return false;
      }
    }

    return true;
  }

  public static boolean validateDoubleRange(Object bean, Field field) {

    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      try {
        double doubleValue = Double.parseDouble(value);
        double min = Double.parseDouble(field.getVarValue("min"));
        double max = Double.parseDouble(field.getVarValue("max"));

        if (!GenericValidator.isInRange(doubleValue, min, max)) {
          return false;
        }
      } catch (Exception e) {
        return false;
      }
    }

    return true;
  }

  public static boolean validateFloatRange(Object bean, Field field) {

    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      try {
        float floatValue = Float.parseFloat(value);
        float min = Float.parseFloat(field.getVarValue("min"));
        float max = Float.parseFloat(field.getVarValue("max"));

        if (!GenericValidator.isInRange(floatValue, min, max)) {

          return false;
        }
      } catch (Exception e) {
        return false;
      }
    }

    return true;
  }

  public static Long validateCreditCard(Object bean, Field field) {

    Long result = null;
    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      result = GenericTypeValidator.formatCreditCard(value);

    }

    return result;
  }

  public static boolean validateEmail(Object bean, Field field) {

    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)
        && !GenericValidator.isEmail(value)) {
      return false;
    } else {
      return true;
    }
  }

  public static boolean validateMaxLength(Object bean, Field field) {

    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (value != null) {
      try {
        int max = Integer.parseInt(field.getVarValue("maxlength"));

        if (!GenericValidator.maxLength(value, max)) {
          return false;
        }
      } catch (Exception e) {
        return false;
      }
    }

    return true;
  }

  public static boolean validateMinLength(Object bean, Field field) {

    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (!GenericValidator.isBlankOrNull(value)) {
      try {
        int min = Integer.parseInt(field.getVarValue("minlength"));

        if (!GenericValidator.minLength(value, min)) {
          return false;
        }
      } catch (Exception e) {
        return false;
      }
    }

    return true;
  }

  protected static boolean isString(Object o) {
    return (o == null) ? true : String.class.isInstance(o);
  }

  public static boolean validateUrl(Object bean, Field field) {

    String value = null;
    if (isString(bean)) {
      value = (String) bean;
    } else {
      value = ValidatorUtils.getValueAsString(bean, field.getProperty());
    }

    if (GenericValidator.isBlankOrNull(value)) {
      return true;
    }

    // Get the options and schemes Vars
    boolean allowallschemes = "true".equalsIgnoreCase(field
        .getVarValue("allowallschemes"));
    int options = allowallschemes ? UrlValidator.ALLOW_ALL_SCHEMES : 0;

    if ("true".equalsIgnoreCase(field.getVarValue("allow2slashes"))) {
      options += UrlValidator.ALLOW_2_SLASHES;
    }

    if ("true".equalsIgnoreCase(field.getVarValue("nofragments"))) {
      options += UrlValidator.NO_FRAGMENTS;
    }

    String schemesVar = allowallschemes ? null : field.getVarValue("schemes");

    // No options or schemes - use GenericValidator as default
    if (options == 0 && schemesVar == null) {
      if (GenericValidator.isUrl(value)) {
        return true;
      } else {
        return false;
      }
    }

    // Parse comma delimited list of schemes into a String[]
    String[] schemes = null;
    if (schemesVar != null) {

      StringTokenizer st = new StringTokenizer(schemesVar, ",");
      schemes = new String[st.countTokens()];

      int i = 0;
      while (st.hasMoreTokens()) {
        schemes[i++] = st.nextToken().trim();
      }

    }

    // Create UrlValidator and validate with options/schemes
    UrlValidator urlValidator = new UrlValidator(schemes, options);
    if (urlValidator.isValid(value)) {
      return true;
    } else {
      return false;
    }
  }

}
                                              ]]></source>
        <p>&#12371;&#12428;&#12395;&#23550;&#12377;&#12427;&#12486;&#12473;&#12488;&#12465;&#12540;&#12473;&#12290;&#12418;&#12392;&#12418;&#12392;&#12354;&#12427;&#12418;&#12398;&#12384;&#12375;&#12289;&#38754;&#20498;&#12394;&#12398;&#12391;intRange&#12289;email&#12289;mask,url,date,maxlength&#12398;6&#12388;&#12434;&#12486;&#12473;&#12488;&#12375;&#12390;&#12415;&#12424;&#12358;&#12392;&#24605;&#12358;&#12290;</p>
        <p>validation.xml&#12398;&#26360;&#12365;&#26041;&#12399;<link href="http://struts.apache.org/userGuide/dev_validator.html">&#26360;&#12365;&#26041;</link>&#12434;&#21442;&#32771;&#12395;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
     <form name="commons">
         <field property="loginName"  depends="url">
         	   <arg0 key="form.loginName.displayname"/>
                   <var>
                        <var-name>allowallschems</var-name>
                        <var-value>true</var-value>
                   </var>
         </field>    
         <field  property="pass" depends="mask">
         	     <arg0 key="form.pass.displayname"/>
                     <var>
                         <var-name>mask</var-name>
                         <var-value>^[a-zA-Z]*$</var-value>
                     </var>
         </field>
         <field  property="note" depends="date">
         	     <arg0 key="form.note.displayname"/>
                     <var>
                         <var-name>datePattern</var-name>
                         <var-value>yyyy-mm-dd</var-value>
                         </var>
         </field>
         <field  property="email" depends="email">
         	     <arg0 key="form.email.displayname"/>
         </field>
         <field  property="quarter" depends="intRange">
         	     <arg0 key="form.quarter.displayname"/>
                    <var>
                       <var-name>min</var-name>
                      <var-value>4</var-value>
                    </var>
                    <var>
                      <var-name>max</var-name>
                      <var-value>16</var-value>
                   </var>
         </field>
         <field  property="nameRead" depends="maxlength">
         	     <arg0 key="form.nameRead.displayname"/>
                     <arg1 name="maxlength" key="${var:maxlength}"/>
                     <var>
                         <var-name>maxlength</var-name>
                        <var-value>10</var-value>
                    </var>
         </field>
      </form>
                                              ]]></source>
        <p>test/com/chikkun/webcms/validagtor/CommonsValidatorTest.java&#12398;&#20316;&#25104;&#12290;</p>
        <source xml:space="preserve"><![CDATA[
/*
 * ]]>&#20316;&#25104;&#26085;<![CDATA[: 2005/09/19
 *
 */
package com.chikkun.webcms.validate;

import java.io.IOException;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.Properties;

import junit.framework.TestCase;

import org.apache.commons.validator.Field;
import org.apache.commons.validator.Form;
import org.apache.commons.validator.Validator;
import org.apache.commons.validator.ValidatorAction;
import org.apache.commons.validator.ValidatorException;
import org.apache.commons.validator.ValidatorResources;
import org.apache.commons.validator.ValidatorResult;
import org.apache.commons.validator.ValidatorResults;

import com.chikkun.common.validator.ValidatorLoader;

public class CommonsValidatorTest extends TestCase {

  public ValidatorLoader loader;

  public Staff staff;

  public Properties apps = null;

  public CommonsValidatorTest(String arg0) {
    super(arg0);
    try {
      loader = new ValidatorLoader();
      apps = loader.getProps();
    } catch (IOException err) {
      // TODO ]]>&#33258;&#21205;&#29983;&#25104;&#12373;&#12428;&#12383;<![CDATA[ catch ]]>&#12502;&#12525;&#12483;&#12463;
<![CDATA[      err.printStackTrace();
    }
  }

  public void testEmailTest(){

    //email]]>&#12376;&#12419;&#12394;&#12356;&#12418;&#12398;
<![CDATA[    staff.setEmail("aaaa");

    ValidatorResources resources = null;
    resources = loader.getResources();
    Validator validator = new Validator(resources, "commons");
    validator.setOnlyReturnErrors(false);
    // Tell the validator which bean to validate against.
    validator.setParameter(Validator.BEAN_PARAM, staff);
    ValidatorResults results = null;

    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }

    Form form = resources.getForm(Locale.getDefault(), "commons");

    Field field = form.getField("email");
    String prettyFieldName = apps.getProperty(field.getArg(0).getKey());

    assertEquals("properties]]>&#12398;&#21517;&#21069;<![CDATA[", prettyFieldName, "Email");
    ValidatorResult result = results.getValidatorResult("email");
    ValidatorAction action = resources.getValidatorAction("email");

    assertFalse(result.isValid("email"));

    String message = apps.getProperty(action.getMsg());
    //System.out.println(message);

    Object[] args = {prettyFieldName};
    assertEquals("message", "Email is an invalid e-mail address.", MessageFormat
        .format(message, args));

    //email]]>&#12392;&#12375;&#12390;&#27491;&#12375;&#12356;
<![CDATA[    staff.setEmail("sakai@chikkun.com");
    results = null;

    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }
    action = resources.getValidatorAction("email");
    result = results.getValidatorResult("email");

    //System.out.println(action.getMethod());
    assertTrue(result.isValid("email"));
    
  }

  
  public void testMaxLengthTest(){

    //11]]>&#25991;&#23383;&#12399;&#39364;&#30446;
<![CDATA[    staff.setNameRead("aaaaaaaaaaa");

    ValidatorResources resources = null;
    resources = loader.getResources();
    Validator validator = new Validator(resources, "commons");
    validator.setOnlyReturnErrors(false);
    // Tell the validator which bean to validate against.
    validator.setParameter(Validator.BEAN_PARAM, staff);
    ValidatorResults results = null;

    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }

    Form form = resources.getForm(Locale.getDefault(), "commons");

    Field field = form.getField("nameRead");
    String prettyFieldName = apps.getProperty(field.getArg(0).getKey());

    assertEquals("properties]]>&#12398;&#21517;&#21069;<![CDATA[", prettyFieldName, "Yomigana");
    ValidatorResult result = results.getValidatorResult("nameRead");
    ValidatorAction action = resources.getValidatorAction("maxlength");

    assertFalse(result.isValid("maxlength"));

    String message = apps.getProperty(action.getMsg());
    //System.out.println(message);

    Object[] args = {prettyFieldName,field.getVarValue("maxlength")};
    
    assertEquals("message", "Yomigana cannot be greater than 10 characters.", MessageFormat
        .format(message, args));

    //10]]>&#25991;&#23383;
<![CDATA[    staff.setNameRead("aaaaaaaaaa");
    results = null;

    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }
    result = results.getValidatorResult("nameRead");

    //System.out.println(action.getMethod());
    assertTrue(result.isValid("maxlength"));
    
  }

  
  public void testIntRangeTest(){

    //4-16]]>&#12398;&#38291;
<![CDATA[    //2(]]>&#31684;&#22258;&#22806;&#12539;&#26410;&#28288;<![CDATA[)
    staff.setQuarter("2");

    ValidatorResources resources = null;
    resources = loader.getResources();
    Validator validator = new Validator(resources, "commons");
    validator.setOnlyReturnErrors(false);
    // Tell the validator which bean to validate against.
    validator.setParameter(Validator.BEAN_PARAM, staff);
    ValidatorResults results = null;

    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }

    Form form = resources.getForm(Locale.getDefault(), "commons");

    Field field = form.getField("quarter");
    String prettyFieldName = apps.getProperty(field.getArg(0).getKey());

    assertEquals("properties]]>&#12398;&#21517;&#21069;<![CDATA[", prettyFieldName, "Quarter");
    ValidatorResult result = results.getValidatorResult("quarter");
    ValidatorAction action = resources.getValidatorAction("intRange");

    assertFalse(result.isValid("intRange"));

    String message = apps.getProperty(action.getMsg());
    //System.out.println(message);

    Object[] args = {prettyFieldName,field.getVarValue("min"),field.getVarValue("max")};
    
    assertEquals("message", "Quarter is not in the range 4 through 16.", MessageFormat
        .format(message, args));

    //12(]]>&#31684;&#22258;&#20869;<![CDATA[)
    staff.setQuarter("12");
    results = null;

    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }
    result = results.getValidatorResult("quarter");

    //System.out.println(action.getMethod());

    assertTrue(result.isValid("intRange"));

    
    //20(]]>&#31684;&#22258;&#22806;&#12539;&#12424;&#12426;&#22823;&#12365;&#12356;<![CDATA[)
    staff.setQuarter("20");
    results = null;

    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }
    result = results.getValidatorResult("quarter");

    //System.out.println(action.getMethod());
    assertFalse(result.isValid("intRange"));

  }
  
  public void testDateTest(){

    //yyyy-mm-dd]]>&#12391;&#12418;<![CDATA[yyyy-m-d]]>&#12391;&#12418;&#21487;
<![CDATA[    //<var-name>datePattern</var-name>]]>&#12434;<![CDATA[<var-name>datePatternStrict</var-name>]]>&#12395;&#12377;&#12428;&#12400;
<![CDATA[    //yyyy-m-d]]>&#12399;&#19981;&#21487;

<![CDATA[    //]]>&#24403;&#28982;&#39364;&#30446;
<![CDATA[    staff.setNote("sakai");

    ValidatorResources resources = null;
    resources = loader.getResources();
    Validator validator = new Validator(resources, "commons");
    validator.setOnlyReturnErrors(false);
    // Tell the validator which bean to validate against.
    validator.setParameter(Validator.BEAN_PARAM, staff);
    ValidatorResults results = null;

    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }

    Form form = resources.getForm(Locale.getDefault(), "commons");

    Field field = form.getField("note");
    String prettyFieldName = apps.getProperty(field.getArg(0).getKey());

    assertEquals("properties]]>&#12398;&#21517;&#21069;<![CDATA[", prettyFieldName, "Note");
    ValidatorResult result = results.getValidatorResult("note");
    ValidatorAction action = resources.getValidatorAction("date");

    assertFalse(result.isValid("date"));

    String message = apps.getProperty(action.getMsg());
    //System.out.println(message);

    Object[] args = {prettyFieldName};
    
    assertEquals("message", "Note is not a date.", MessageFormat
        .format(message, args));

    //2005-09-19
    staff.setNote("2005-09-19");
    results = null;

    try {
      results = validator.validate();
    } catch (ValidatorException err) {
      err.printStackTrace();
    }
    result = results.getValidatorResult("note");

    //System.out.println(action.getMethod());

    assertTrue(result.isValid("date"));

    
    //2005-9-1
    staff.setNote("2005-9-1");
    results