#author("2023-10-24T13:47:06+00:00","","") #author("2024-01-12T03:29:08+00:00","","") #topicpath ---- ユーザ入力値は必ずValidateする必要がありますが、Actionクラスに入力チェック処理などを書くと、ビジネスロジックと入力チェック処理が混在し、あまりキレイとはいえません。また入力した内容はActionFormが責任を持つべきだという思想(?)からか、ActionFormにはvalidateする統一的なI/Fを持っています。ちなみにこの方法はStruts1.0までのもので、1.1以降は[[Validatorプラグイン>Struts/Struts Validator]]が主流となるようです。 #contents ***ロジックの実装 [#fa7bfc53] まずは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}に対応します。((置換したい文字列がない場合は errors.add("input",new ActionError("errors.required") );でよい)) ***エラー遷移先や、Validateすることの宣言 [#y1e90ad5] 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)((tilesもかけるみたいですね))を定義しておきます。 ***JSP側の記述 [#e12e07d6] さらに遷移先のJSPでは、エラー文言を表示したい箇所に <html:errors property="input"/> と記述しておきます。これで、上のvalidate処理でエラーがあった場合、property属性の値(inputのこと)のIDのエラーをerrorsインスタンスより探し、画面表示処理を行います。表示する内容は次のApplicationResources.propertiesで定義します。 ***ApplicationResources.propertiesへの追加 [#y154b03e] 加えて、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> と表示されます。以上で、完了です。 ***まとめ [#zed33d88] もう一度対応を考えると errors.add("input",new ActionError("errors.required","キーワードを入力してください"));の意味は -inputが、<html:errors property="input"/>に対応し、 -"errors.required"がプロパティファイルのキーに対応し -"キーワードを入力してください"が、{0}に置換されます であり、プロパティファイルより取得した文字列が<html:errors property="input"/>と書いた箇所に表示されます。 やってみるとわりかしすっきりするんですが、やっぱ道は長いですね。 ---- この記事は #vote(おもしろかった[135],そうでもない[33]) #vote(おもしろかった[136],そうでもない[33]) -簡潔で分かり易い -- [[default]] &new{2006-08-07 10:47:35 (月)};&new{2008-02-01 (金) 00:17:46}; - 勉強になります。ありがとうございます -- &new{2011-12-13 (火) 20:35:14}; #comment #topicpath SIZE(10){現在のアクセス:&counter;}