- PR -

自前で追加したValidateが認識しない?

1
投稿者投稿内容
C'zka
ベテラン
会議室デビュー日: 2003/09/04
投稿数: 64
投稿日時: 2003-09-10 19:40
以前はお世話になりました。

今回は、xmlに記述してValidateを行う方法について検証しています。
そこで、まずJava側で行う方法を検証しています。
それで、現在止まっているのが、自前で作成したvalidate用のクラスファイルに飛ばないことです。

設定は以下のとおりに行っています。
1.struts-config.xml

<action
path="/testForm"
input="testForm.jsp"
type="test.modules.validate.action.testFormAction"
name="rootNullForm"
scope="request"
validate="true">
<forward
name="success"
path="/testForm.jsp"/>
</action>
を追記した。

2.validation.xml

<form name="testForm">
<field
property="testText"
depends="zenkaku">
<arg0 key="testForm.testText" resource="false" />
<var>
<var-name>zenkaku</var-name>
</var>
</field>
</form>
を追記した。

3.validator-rules.xml
<validator name="zenkaku"
classname="eladmin.modules.validate.validate.elAdminValidate"
method="validateZenkaku"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
msg="errors.zenkaku">
</validator>
を追記した。

4.jsp(bodyの中身)
<html:form action="/testForm">
<html:errors />
<input type="textarea" name="testText"/>
<html:submit value="send" />
</html:form>

5.Actionクラス
単純にログを出しているだけ。本来なら、validateが先に引っかかって届かないはず。

以上のことが記述してあります。

これ以外に必要なものはまだあるのでしょうか?

作成には、参照元記事URLのように設定したのですが・・・

以上、何か間違い、欠損等がおわかりになる方にご教授お願いしたいと思います。
よろしくお願いいたします。

P.S. レスは明日以降になりますが、ご了承ください。
PAL
ベテラン
会議室デビュー日: 2002/11/14
投稿数: 63
投稿日時: 2003-09-12 19:43
他のページなので気が引けますが、レスも無いようなので。。。。

http://www.freeml.com/message/struts-user@freeml.com/0002571

に関連しそうな話題がありました。
会議室デビュー日: 2003/09/17
投稿数: 1
投稿日時: 2003-09-17 11:36
はじめまして。
私も今Strusで開発を行っているのですが、
Validateに飛んでいないという事は、
xmlの設定かvalidatorクラスに問題があると思いますので、
参考になれば、とソースを載せておきます。
(import文適当です・・)

1.ByteMaxLengthCheck.java(validator)

import java.text.CharacterIterator;
import java.text.StringCharacterIterator;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.ServletContext;
import java.io.*;
import org.apache.commons.validator.Field;
import org.apache.commons.validator.GenericValidator;
import org.apache.commons.validator.ValidatorAction;
import org.apache.commons.validator.ValidatorUtil;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.validator.FieldChecks;
import org.apache.struts.validator.Resources;

/**
*  Shift_JISに基づいて最大バイト数を設定するクラス。
*/
public class ByteMaxLengthCheck extends FieldChecks {
  
  public static boolean validateByteMaxLength(
      Object bean,
      ValidatorAction va,
      Field field,
      ActionErrors errors,
      HttpServletRequest request,
      ServletContext application)  throws IOException {
    
    //入力された文字列の取得
    String value = ValidatorUtil.getValueAsString(bean, field.getProperty());
    
    //validator-rulesのvar-name(byteMaxLength)のvar-value取得
    String length = field.getVarValue("byteMaxLength");
    
    //valueの文字列をShift_JISのbyteCodeに変換
    byte[] bytes = value.getBytes("Shift_JIS");
    
    //lengthを最大バイト数に設定
    int byteMaxLength = Integer.parseInt(length);
    
    if ( bytes.length > byteMaxLength ) {
      errors.add(field.getKey(),Resources.getActionError(request, va, field));
      return false;
    }
    return true;
  }
}

2.validator-rules.xml(一部)
<validator
  name="byteMaxLength"
  classname="jp.qvc.ec.common.struts.validator.ByteMaxLengthCheck"
  method="validateByteMaxLength"
  methodParams="java.lang.Object,
      org.apache.commons.validator.ValidatorAction,
      org.apache.commons.validator.Field,
      org.apache.struts.action.ActionErrors,
      javax.servlet.http.HttpServletRequest,
      javax.servlet.ServletContext"
  msg="errors.byteMaxLength">
</validator>

3.validation.xml
<field property="sampleName" depends="byteMaxLength">
  <arg0 key="namae" />
  <var>
    <var-name>byteMaxLength</var-name>
    <var-value>20</var-value>
  </var>
</field>

これでhtmlのsamleNameに20バイト以上の文字列が入った場合、
resourceファイルのerrors.byteMaxLengthのエラーがでます。

それから名前から察するに多分全角文字でなんらかのチェックを
行うvalidateのようですが、
> 2.validation.xml
(中略)
> <arg0 key="testForm.testText" resource="false" />
> <var>
> <var-name>zenkaku</var-name>
> </var>
ココの<var-name>は<var-value>と対になって使うものなので、
validate側で特に値を必要としない場合は
<var>ごと書く必要はありません。
(私の場合は<var-value>で最大バイト数としてvalidate側で読み込んでいます)

C'zka
ベテラン
会議室デビュー日: 2003/09/04
投稿数: 64
投稿日時: 2003-09-18 14:25
しばらく別の作業にまわされていてチェックできませんでした・・・・
レスが遅れたことをお詫び申し上げます。

で、結果的には自己解決いたしました。
1点は、beanクラスが不足していたこと。
1点は、XMLのタグがうまく切れていない単純にXMLのエラーだったこと。
です。
他にもあったような気はしますが・・・・すいません、忘れてしまいました。

皆さん、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)