#topicpath ---- //ここにコンテンツを記述します。 [[Validateのやり方>Struts/Validateのやり方]]でも書きましたが、Struts1.0にはValidateをする仕組みがFormBeanに組み込まれていました。しかし、Struts1.1になってからDynaActionFormを使うことが増えましたが、DynaActionFormでは今までのやり方は使えません((FormBean書かないからね))。DynaActionFormでFormでValidateを行うには、このStrutsValidator機能を使うみたいです。これはソースコードにチェックロジックを記述するのではなくて、設定ファイル(validation.xml)と、ルールファイル(validator-rules.xml)を用いてチェック機能を実装するというものです。これを使うことによって -設定ファイルを利用して、ソースコードを減らして(ひいてはコードを簡潔に)、コード間の関連を疎にする -クライアントサイドのチェックが簡単に実装できる((JavaScriptですね)) などのメリットがありそうです。 ここでの目的としてはサンプルとして[[以前>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 ***プラグインの記述 [#v7407df1] 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のクラスを変更 [#b617317f] 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にルールを記述 [#i67aab77] 今回も[[前回>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値ではなく、文字列ですよっていう意味です。 ***アクションマッピングの属性 [#z923e915] Actionタグに、valideteする旨の validate="true" エラー時の遷移先 input="kino.tiles.javaDocumentSearch" <-tilesの値も書ける が記述されていることを念のため確認しましょう。 基本的にはこれでValidatorが有効になります。あとはエラー表示の記述などです。~ ここまででformのinputプロパティがnullの時に、別のtileに遷移することが確認できました。 便利ですねぇ。ソースコード全くいじってないですからね。 ***エラーのIDと、ApplicationResources.propertiesのキーの指定、{0}の置換 [#y0a2ff84] まだよくわかってないんですが +<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で検証する [#yed97405] Validatorの目玉としてJavaScript検証があります。 <html:javascript formName="searchForm"/> をどこかに記述してFormを <html:form action="/searchSearch" focus="input" > -> <html:form action="/searchSearch" focus="input" onsubmit="return validateSearchForm(this);"> とすると完成です。空文字でリクエストすると、アラートが表示されました。 ***TIPS集 [#d81c2b4f] <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> こんな感じですね。 ***関連リンク [#l9fc115e] このサイトを参考に書いています。 -[[実用サンプルコードで理解する「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(おもしろかった[27],そうでもない[15]) - hPJgBSSpnRB -- [[bqxytsvj]] &new{2009-03-31 (火) 18:04:56}; - lDPOnJZOseANRNrPjgb -- [[didnfoxerq]] &new{2009-05-28 (木) 04:19:28}; - lDPOnJZOseANRNrPjgb -- [[didnfoxerq]] &new{2009-05-28 (木) 04:21:09}; - IPaOZezPNsUOZUXP -- [[goglmqj]] &new{2010-04-10 (土) 03:58:37}; - OtpXZZuezd -- [[jcbvprbqn]] &new{2010-05-31 (月) 08:35:22}; - gFtIXcLczSSChX -- [[ylmtokan]] &new{2010-06-27 (日) 08:40:52}; - lIPXmhbixrevngK -- [[woacqjvvq]] &new{2010-12-09 (木) 03:40:19}; - KIWgGiRhqOiPM -- [[dhpybojgrm]] &new{2010-12-15 (水) 07:59:31}; - ERkAMXBhBNKmcUfqlx -- [[auqcqaqch]] &new{2011-04-29 (金) 01:48:28}; - IjBGiltzt -- [[pjngaioth]] &new{2011-06-18 (土) 00:50:38}; - teMVOGVdevvLk -- [[ilvhuckxhi]] &new{2011-11-08 (火) 04:16:40}; - wIXzzgwyxbqjXbRNS -- [[oharswhnz]] &new{2012-01-02 (月) 06:27:58}; - aKrExRGLwBnBn -- [[wnrsarkbl]] &new{2012-01-13 (金) 17:38:45}; - HqeowmfLLHihts -- [[fatcjqd]] &new{2012-01-29 (日) 18:41:36}; - HtPXWAifd -- [[nhrrhcliqax]] &new{2012-03-11 (日) 21:37:23}; - HqCSPJltKkCXa -- [[tzamtjql]] &new{2012-04-24 (火) 23:19:24}; - ZaCwJalPMdk -- [[gkdahwxjq]] &new{2012-05-13 (日) 19:48:14}; - WAnfslKLPWqU -- [[jymkxmpkfhd]] &new{2013-11-09 (土) 06:53:49}; #comment #topicpath SIZE(10){現在のアクセス:&counter;}