StrutsでValidatorFormを使うとValidatorが動かないという現象
ValidatorFormを使った場合、validation.xmlの<form>のname属性に記述する値は、アクションフォームBeanの論理名(struts-config.xmlの<form-bean>のname属性)。 ValidatorActionFormを使った場合は、struts-config.xmlの<action>タグのpath属性を記述する。
こういった感じで認識していました。が、ここでだいぶハマりました。ValidatorActionFormを使った場合は動くのだけど、ValidatorFormを使うと動かないという現象です。
本を見てもググってもだいたい上記のような感じで書いてあるので気づきにくかったのですが、ValidatorFormを使う場合は、実際にはアクションフォームBeanの論理名ではなくて、<action>のattribute属性の値を書くようです。もちろんこれはattribute属性を書いた場合だけの話です。以下、アクションフォームBean名はhogeFormだけどattribute属性の値はformの場合。
<!-- struts-config.xml --> <struts-config> <form-beans> <form-bean name="hogeForm" type="samples.HogeForm"/> </form-beans> <action-mappings> <action path="/hoge" type="samples.HogeAction" input="/error.jsp" name="hogeForm" attribute="form" scope="request" validate="true"> <forward name="SUCCESS" path="/success.jsp"/> </action> </action-mappings> : </struts-config>
<!-- validation.xml --> <form-validation> <formset> <!-- name属性には "hogeForm" ではなく "form" を書く--> <form name="form"> <field property="title" depends="required"> <arg key="error.hoge"/> </field> </form> </formset> </form-validation>
つまりは、validation.xmlの<form>のname属性には、アクションフォームBeanが何という名称でコンテキストへ登録されるかを書けばよいという意味なのかと思います。
Struts1.2.8(と1.2.4)で試しましたが、他のバージョン(特に1.1系)では試していないので1.2.8に限った話なのかどうかはわかりません。もしかして参考にした本が1.1系なので、それでかな。何か間違えてたら教えてください。