Top / Struts / Validateのやり方

ユーザ入力値は必ずValidateする必要がありますが、Actionクラスに入力チェック処理などを書くと、ビジネスロジックと入力チェック処理が混在し、あまりキレイとはいえません。また入力した内容はActionForm?が責任を持つべきだという思想(?)からか、ActionForm?にはvalidateする統一的なI/Fを持っています。ちなみにこの方法はStruts1.0までのもので、1.1以降はValidatorプラグインが主流となるようです。

ロジックの実装

まずはActionForm?にチェックロジックを実装します。ActionForm?には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;
}
errors.add("input",new ActionError("errors.required", "キーワードを入力してください"));

の意味は

errors.add([エラーのID(?)],new ActionError([ApplicationResources.propertiesのキー], [置換文字列]));

という意味です。エラーのIDってのは後述の <html:errors>タグのproperty属性に対応し、置換文字列ってのは後述の{0}に対応します。*1

エラー遷移先や、Validateすることの宣言

struts-config.xmlで

<action 
  name="searchForm" scope="request"
  path="/javaDocSearch" type="kino.actions.JavaDocSearchAction" 
  validate="true" input="kino.tiles.javaDocumentSearch">
  <forward name="success" path="kino.tiles.javaDocumentSearch" />
</action>

のようにエラー時の遷移先(kino.tiles.javaDocumentSearch?)*2を定義しておきます。

JSP側の記述

さらに遷移先のJSPでは、エラー文言を表示したい箇所に

<html:errors property="input"/>

と記述しておきます。これで、上のvalidate処理でエラーがあった場合、property属性の値(inputのこと)のIDのエラーをerrorsインスタンスより探し、画面表示処理を行います。表示する内容は次のApplicationResources?.propertiesで定義します。

ApplicationResources?.propertiesへの追加

加えて、ApplicationResources?.propertiesに下記内容を追加します。

errors.header=<hr><font color="red"><h3>ERROR</h3>
errors.footer=<hr></font>
errors.required={0}

と記述しておきます。そうすると表示時に{0}にerrors.addでセットした文言が入り画面上に

<hr><font color="red"><h3>ERROR</h3>
キーワードを入力してください
<hr></font>

と表示されます。以上で、完了です。

まとめ

もう一度対応を考えると errors.add("input",new ActionError?("errors.required","キーワードを入力してください"));の意味は

  • inputが、<html:errors property="input"/>に対応し、
  • "errors.required"がプロパティファイルのキーに対応し
  • "キーワードを入力してください"が、{0}に置換されます

であり、プロパティファイルより取得した文字列が<html:errors property="input"/>と書いた箇所に表示されます。

やってみるとわりかしすっきりするんですが、やっぱ道は長いですね。


この記事は

選択肢 投票
おもしろかった 136  
そうでもない 33  
  • 簡潔で分かり易い -- default? 2006-08-07 10:47:35 (月)2008-02-01 (金) 00:17:46
  • 勉強になります。ありがとうございます -- 2011-12-13 (火) 20:35:14

Top / Struts / Validateのやり方

現在のアクセス:55452


*1 置換したい文字列がない場合は errors.add("input",new ActionError?("errors.required") );でよい
*2 tilesもかけるみたいですね

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-01-12 (金) 12:29:08 (104d)