実験開始。

ただいま23:12。もうすぐ月曜日や。

とりあえず作業段取りにしたがってやることやっちゃおう。

1.validation.xml の記述。
validation.xml(間違ってる)

<?xml version="1.0" encoding="iso-8859-1"?>
<!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="LoginForm">
      <field property="userID" depends="required,maxlength">
        <arg0 key="ユーザーID" resource="false" />
        <arg1 name="maxlength" key="${var:maxlength}" resource="false" />
        <var>
          <var-name>maxlength</var-name>
          <var-value>5</var-value>
        </var>
      </field>
      <field property="password" depends="required,maxlength">
        <arg0 key="パスワード" resource="false" />
        <arg1 name="maxlength" key="${var:maxlength}" resource="false" />
        <var>
          <var-name>maxlength</var-name>
          <var-value>5</var-value>
        </var>
      </field>
    </form>
  </formset>
</form-validation>

google 先生に聞いた内容から判断するとこんな感じっぽい感じ。
ちなみに、この作例ですと項目の必須入力チェックと5文字以下と言う入力チェックがかかる予定。



2.LoginForm を ValidatorForm(org.apache.struts.validator.ValidatorForm)から継承に変える。スーパークラスを変更するだけ。
LoginForm.java(それなりに正しい)

import org.apache.struts.validator.ValidatorForm;

public class LoginForm extends ValidatorForm {
  private String userID;
  private String password;
  
  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }

  public String getUserID() {
    return userID;
  }

  public void setUserID(String userID) {
    this.userID = userID;
  }
}


3.Login.jsp に validator がエラーメッセージを差し込む領域を指定するタグ(
)を書く。
Login.jsp(問題ない)

<%@page contentType="text/html; charset=Windows-31J"%>
<%@taglib uri="/tags/struts-html" prefix="html"%>

<html:html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=Windows-31J">
<meta HTTP-EQUIV="Content-Language" CONTENT="ja">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
</head>
<body>
<html:errors/>
<html:form action="/Login">
名前:<html:text property="userID"/><br>
パスワード:<html:text property="password"/><br>
<html:submit property="submit" value="ログイン"/>
</html:form>
</body>
</html:html>

4.struts-config.xml の追記
struts-config.xml(間違ってる)

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
  <data-sources />
  <form-beans>
      <form-bean name="loginForm" type="LoginForm" />
  </form-beans>
  <global-exceptions />
  <global-forwards />
  <action-mappings>
      <action path="/Login" type="LoginAction" name="loginForm" scope="request" input="Login.jsp" validate="true">
          <forward name="next" path="/loginSuccess.jsp"/>
          <forward name="reject" path="/rejectUser.jsp"/>
      </action>
  </action-mappings>
  <message-resources />
  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
    <set-property property="stopOnFirstError" value="true" />
  </plug-in>
</struts-config>

オリジナルとの変更箇所は、 タグの要素を2つ追加、タグの追加の2点。



5.commons-validator.jar をWEB-INF/libにコピる。

6.validation-rules.xml ををWEB-INFにコピる。



さ、行ってみよ!

http://localhost:8080/test/Login.jsp

入力項目に何も入れずに、サブミットぉ〜!

あれ?普通に失敗した方の画面に遷移しちゃってますけど。

えっとですね、そうでは無くて、内部エラー500 XXX exception みたいな哀しい感じか、ユーザーIDを入力してね!みたいな感じを期待してやまないんですけど。

ま、一発目はこんなもんか。夜はまだまだ長い。うがー。