- - PR -
自前で追加したValidateが認識しない?
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 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. レスは明日以降になりますが、ご了承ください。 |
|
投稿日時: 2003-09-12 19:43
他のページなので気が引けますが、レスも無いようなので。。。。
http://www.freeml.com/message/struts-user@freeml.com/0002571 に関連しそうな話題がありました。 |
|
投稿日時: 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側で読み込んでいます) |
|
投稿日時: 2003-09-18 14:25
しばらく別の作業にまわされていてチェックできませんでした・・・・
レスが遅れたことをお詫び申し上げます。 で、結果的には自己解決いたしました。 1点は、beanクラスが不足していたこと。 1点は、XMLのタグがうまく切れていない単純にXMLのエラーだったこと。 です。 他にもあったような気はしますが・・・・すいません、忘れてしまいました。 皆さん、ありがとうございました。 |
1
