#topicpath
----
//ここにコンテンツを記述します。
[[Validateのやり方>Java/Struts/Validateのやり方]]でも書きましたが、StrutsにはValidateをする仕組みがFormBeanに組み込まれていました。しかし、Struts1.1になってからDynaActionFormを使うことが増えましたが、DynaActionFormでは今までのやり方は使えません((FormBean書かないからね))。DynaActionFormでFormでValidateを行うには、このStrutsValidator機能を使うみたいです。これはソースコードにチェックロジックを記述するのではなくて、設定ファイル(validation.xml)と、ルールファイル(validator-rules.xml)を用いてチェック機能を実装するというものです。これを使うことによって
[[Validateのやり方>Struts/Validateのやり方]]でも書きましたが、StrutsにはValidateをする仕組みがFormBeanに組み込まれていました。しかし、Struts1.1になってからDynaActionFormを使うことが増えましたが、DynaActionFormでは今までのやり方は使えません((FormBean書かないからね))。DynaActionFormでFormでValidateを行うには、このStrutsValidator機能を使うみたいです。これはソースコードにチェックロジックを記述するのではなくて、設定ファイル(validation.xml)と、ルールファイル(validator-rules.xml)を用いてチェック機能を実装するというものです。これを使うことによって
-設定ファイルを利用して、ソースコードを減らして(ひいてはコードを簡潔に)、コード間の関連を疎にする
-クライアントサイドのチェックが簡単に実装できる((JavaScriptですね))

などのメリットがありそうです。

ここでの目的としてはサンプルとして[[以前>Java/Struts/Validateのやり方]]使っていた
ここでの目的としてはサンプルとして[[以前>Struts/Validateのやり方]]使っていた
 public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){
   ActionErrors errors = new ActionErrors();
   //入力が空だったら
   if (input == null || input.equals("")) {
     テキストボックスでエラーが発生した、エラー文言は「キーワードを入力してください」
     errors.add("input",new ActionError("errors.required", "キーワードを入力してください"));
   }
   return errors;
 }
と
 <html:errors property="input"/>
をどのように実装するか、を考えたいと思います。

----
#contents
***プラグインの記述
Struts ValidatorはStrutsのプラグインであるためstruts-config.xmlに以下を記述します。
 <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
   <set-property property="pathnames" 
      value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
 </plug-in>

***Formのクラスを変更
DynaActionFormではvalidate処理が行われないため、DynaValidatorFormにFormの内容を変更します。
   <form-bean name="searchForm" type="org.apache.struts.action.DynaActionForm">
 -><form-bean name="searchForm" type="org.apache.struts.validator.DynaValidatorForm">

***validation.xmlにルールを記述
今回も[[前回>Java/Struts/Validateのやり方]]と同様、searchFormのinputプロパティはnullがNGというチェックを実装します。validation.xmlに以下の内容を記述します。
今回も[[前回>Struts/Validateのやり方]]と同様、searchFormのinputプロパティはnullがNGというチェックを実装します。validation.xmlに以下の内容を記述します。
 <form-validation>
   <formset>
     <form name="searchForm">
       <field property="input" depends="required">
         <arg0 key="キーワードを入力してください" resource="false"/>
       </field>
     </form>
   </formset>
 </form-validation>
こんな感じです。requiredはnullチェックするよって意味です。arg0タグは{0}に対応します。resource="false"はkey属性がkey値ではなく、文字列ですよっていう意味です。


***アクションマッピングの属性
Actionタグに、valideteする旨の
 validate="true" 
エラー時の遷移先
 input="kino.tiles.javaDocumentSearch" <-tilesの値も書ける
が記述されていることを念のため確認しましょう。

基本的にはこれでValidatorが有効になります。あとはエラー表示の記述などです。~
ここまででformのinputプロパティがnullの時に、別のtileに遷移することが確認できました。
便利ですねぇ。ソースコード全くいじってないですからね。


***エラーのIDと、ApplicationResources.propertiesのキーの指定、{0}の置換
まだよくわかってないんですが
+<html:errors property="input"/> のinputの指定方法(エラーのID)
+new ActionError("errors.required", "キーワードを入力してください")の~
"errors.required"の指定方法
+new ActionError("errors.required", "キーワードを入力してください")の~
"キーワードを入力してください"の文字列の指定

ですが、

+エラーのIDはFormのプロパティと同じになる((変更不可能?))みたいで、searchFormのpropertyは"input"であるため
 <html:errors property="input"/>
でよい。
+ApplicationResources.propertiesのキーは、発生したエラーが depends="required"~
であるためerrors.requiredがキーとなる
+プロパティファイルの{0}が
 <arg0 key="キーワードを入力してください" resource="false"/>
に対応する

みたいですね。

でもそうだとすると、テキストボックスが複数あって、すべてに値が入ってなかった場合にNGとしたい場合<html:errors property="xxxxx"/>は何を書けばよいんでしょうね。だれか、おしえてっ。。


***JavaScriptで検証する
Validatorの目玉としてJavaScript検証があります。
 <html:javascript formName="searchForm"/>
をどこかに記述してFormを
    <html:form action="/searchSearch" focus="input" >
 -> <html:form action="/searchSearch" focus="input"
         onsubmit="return validateSearchForm(this);"> 
とすると完成です。空文字でリクエストすると、アラートが表示されました。




***TIPS集
 <msg name="required" key="errors.userid.null" />
とすると、ApplicationResources.propertiesのキー値を変えることができます。この例では
 errors.required -> errors.userid.null
に変更しています。
 <form name="passwordForm">
   <field property="userid" depends="required">
     <msg name="required" key="errors.userid.null" />
   </field>
 </form>
こんな感じですね。


***関連リンク
このサイトを参考に書いています。
-[[実用サンプルコードで理解する「Struts」の基礎:http://www.itmedia.co.jp/enterprise/0311/28/epn02_13.html]]
-[[Struts StudioによるWebアプリケーションの開発:http://www.atmarkit.co.jp/fjava/rensai2/jakarta12/jakarta12_02.html]]

----
この記事は
#vote(おもしろかった,そうでもない)

#comment
#navi(Java/Struts)
#topicpath


SIZE(10){現在のアクセス:&counter;}


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS