Top / Struts / Struts Validator

Validateのやり方でも書きましたが、Struts1.0にはValidateをする仕組みがFormBean?に組み込まれていました。しかし、Struts1.1になってからDynaActionForm?を使うことが増えましたが、DynaActionForm?では今までのやり方は使えません*1DynaActionForm?でFormでValidateを行うには、このStrutsValidator?機能を使うみたいです。これはソースコードにチェックロジックを記述するのではなくて、設定ファイル(validation.xml)と、ルールファイル(validator-rules.xml)を用いてチェック機能を実装するというものです。これを使うことによって

  • 設定ファイルを利用して、ソースコードを減らして(ひいてはコードを簡潔に)、コード間の関連を疎にする
  • クライアントサイドのチェックが簡単に実装できる*2

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

ここでの目的としてはサンプルとして以前使っていた

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"/>

をどのように実装するか、を考えたいと思います。


プラグインの記述

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にルールを記述

今回も前回と同様、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}の置換

まだよくわかってないんですが

  1. <html:errors property="input"/> のinputの指定方法(エラーのID)
  2. new ActionError?("errors.required", "キーワードを入力してください")の
    "errors.required"の指定方法
  3. new ActionError?("errors.required", "キーワードを入力してください")の
    "キーワードを入力してください"の文字列の指定

ですが、

  1. エラーのIDはFormのプロパティと同じになる*3みたいで、searchFormのpropertyは"input"であるため
    <html:errors property="input"/>
    でよい。
  2. ApplicationResources?.propertiesのキーは、発生したエラーが depends="required"
    であるためerrors.requiredがキーとなる
  3. プロパティファイルの{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>

こんな感じですね。

関連リンク

このサイトを参考に書いています。


この記事は

選択肢 投票
おもしろかった 31  
そうでもない 16  
  • hPJgBSSpnRB -- bqxytsvj? 2009-03-31 (火) 18:04:56
  • lDPOnJZOseANRNrPjgb? -- didnfoxerq? 2009-05-28 (木) 04:19:28
  • lDPOnJZOseANRNrPjgb? -- didnfoxerq? 2009-05-28 (木) 04:21:09
  • IPaOZezPNsUOZUXP -- goglmqj? 2010-04-10 (土) 03:58:37
  • OtpXZZuezd -- jcbvprbqn? 2010-05-31 (月) 08:35:22
  • gFtIXcLczSSChX -- ylmtokan? 2010-06-27 (日) 08:40:52
  • lIPXmhbixrevngK -- woacqjvvq? 2010-12-09 (木) 03:40:19
  • KIWgGiRhqOiPM -- dhpybojgrm? 2010-12-15 (水) 07:59:31
  • ERkAMXBhBNKmcUfqlx? -- auqcqaqch? 2011-04-29 (金) 01:48:28
  • IjBGiltzt -- pjngaioth? 2011-06-18 (土) 00:50:38
  • teMVOGVdevvLk? -- ilvhuckxhi? 2011-11-08 (火) 04:16:40
  • wIXzzgwyxbqjXbRNS -- oharswhnz? 2012-01-02 (月) 06:27:58
  • aKrExRGLwBnBn? -- wnrsarkbl? 2012-01-13 (金) 17:38:45
  • HqeowmfLLHihts -- fatcjqd? 2012-01-29 (日) 18:41:36
  • HtPXWAifd -- nhrrhcliqax? 2012-03-11 (日) 21:37:23
  • HqCSPJltKkCXa -- tzamtjql? 2012-04-24 (火) 23:19:24
  • ZaCwJalPMdk -- gkdahwxjq? 2012-05-13 (日) 19:48:14
  • WAnfslKLPWqU -- jymkxmpkfhd? 2013-11-09 (土) 06:53:49

Top / Struts / Struts Validator

現在のアクセス:41729


*1 FormBean?書かないからね
*2 JavaScript?ですね
*3 変更不可能?

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-07-03 (月) 16:51:28 (290d)