トップページ >  Struts >  ValidatorFormを使う
初版2006/08/10 最終更新日2013/11/21
  ValidatorFormを使う
目次
ValidatorFormを使う
ValidatorFormを実装する
アクションと遷移先JSPを実装する
MessageResources
ValidatorFormを使う
StrutsでValidatorFormを使うには、struts-configの設定が必要です。
まずWEB-INF/lib/配下にcommons-validator-1.3.1.jarが必要です。
Struts1.3.10ではstruts-config.xmlを以下のようにプラグインを追加する必要があります。

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
        "http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>
  <form-beans>
    <form-bean name="test_form" type="jp.co.confrage.form.ValidatorLoginForm">
      <form-property name="id" type="java.lang.String" initial="id" />
      <form-property name="password" type="java.lang.String" initial="pass" />
    </form-bean>
  </form-beans>

  <action-mappings>
    <action path="/sample_form"
      type="jp.co.confrage.action.TestValidatorLoginAction"
     name="test_form"
     scope="request"
     input="/WEB-INF/pages/error.jsp">
    <forward name="success" path="/WEB-INF/pages/login.jsp" />
  </action>
</action-mappings>

<message-resources parameter="MessageResources"/>

  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames"
     value="/org/apache/struts/validator/validator-rules.xml, /WEB-INF/validation.xml" />
  </plug-in>
</struts-config>

Struts1.3.10ではvalidator-rules.xmlのパスは上記のとおりになりますので注意してください。
validation.xml配下のように新規作成します。name属性はstruts-config.xmlと合わせます。

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE form-validation PUBLIC
  "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
  "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
   
<form-validation>
  <formset>
    <form name="test_form">
      <field property="password" depends="required">
        <msg name="required" key="msg.length" />
      </field>
    </form>
  </formset>
</form-validation>

初期画面のindex.jspは以下の通りです。

<%@ page contentType="text/html; charset=Windows-31J" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>

<html:html>
  <head>
    <title>サンプルログイン</title>
    <meta http-equiv="Content-Type" 
                  content="text/html; charset=Windows-31J">
  </head>
<body>

<html:form action="/sample_form">
  Login画面<br /><br />
  <html:text property="id" size="10" maxlength="8" />
  <html:text property="password" size="10" maxlength="8" />
  <html:submit property="submit" value="実行"/>
</html:form>
</body>
</html:html>

ValidatorFormを実装する
これでValidatorFormを使用することができるようになります。
実装は、org.apache.struts.validator.ValidatorFormを継承したアクションフォームを作成するだけです。validatorメソッドはありません。

package jp.co.confrage.form;

import org.apache.struts.validator.ValidatorForm;

public class ValidatorLoginForm extends ValidatorForm{
    private String id = null;
    
    private String password = null;

    public void setId(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }

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

アクションと遷移先JSPを実装する
とりあえず、以下のようなアクションを実装します。成功ならlogin.jsp、validatorチェックに引っかかればerror.jspに遷移します。

package jp.co.confrage.action;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jp.co.confrage.form.ValidatorLoginForm;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class TestValidatorLoginAction extends Action {

    public ActionForward execute(ActionMapping mapping, ActionForm _form,
            HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

        ValidatorLoginForm form = (ValidatorLoginForm)_form;
        
        String id = form.getId();
        String pass = form.getPassword();
        
        return mapping.findForward("success");
    }

}

以下、login.jspです。

<%@ page contentType="text/html; charset=Windows-31J" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>

<html:html>
  <head>
    <title>ポータルサイト</title>
    <meta http-equiv="Content-Type" 
                  content="text/html; charset=Windows-31J">
  </head>
<body>

<bean:write name="test_form" property="id" />
<bean:write name="test_form" property="password" />

</body>
</html:html>

以下、error.jspです。

<%@ page contentType="text/html; charset=Windows-31J" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>

<html:html>
  <head>
    <title>入力エラー</title>
    <meta http-equiv="Content-Type" 
                  content="text/html; charset=Windows-31J">
  </head>
<body>
<html:errors property="password" />
</body>
</html:html>

propertyをvalidation.xmlのpropertyと合わせるとそのエラーに対するメッセージが表示されます。
msg要素のkey属性のメッセージが表示されんされます。

MessageResources
MessageResourcesは以下のようにしています。
エラーだった場合は、length errorと表示されます。

msg.title=ƒLogin
msg.length=length error