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

***validateの使用方法
あらかじめ、struts-config.xmlで
 <action
    path="/user_regist"
    input="/regist.jsp" <-エラー発生時の遷移先。
    type="kino.action.UserRegistAction"
    name="userRegistForm"
    scope="request"
    attribute="userRegistForm">
のようにエラー遷移先(/regist.jsp)を定義しておきます。~
次にvalidate処理の記述です。ActionFormにはvalidateメソッドが定義されているのでこのメソッドをオーバーライドします。下の例ではユーザ入力値が空だったり、パラメータがリクエストにのってこなかったりしたときに、エラーを表示しています。
 public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){
   ActionErrors errors = new ActionErrors();
   
   //ユーザIDが空だったら
   if(userId==null || userId.length()==0){
     ユーザIDのテキストボックスでエラーが発生した、エラー文言は「ユーザID」
     errors.add("userId",new ActionError("errors.required","ユーザID"));
   }
   return errors;
 }
さらにJSP側では、エラー文言を表示したい箇所に
 <html:errors property="userId"/>
と記述しておきます。~
加えて、ApplicationResources.propertiesに下記内容を追加(ファイルは/WEB-INF/classesにある)
 errors.header=<hr><font color="red"><h3>ERROR</h3>
 errors.footer=<hr></font>
 errors.required={0} Required    ← {0}にerrors.addでセットした文言が入る。
と記述しておきます。~
さてerrors.add("userId",new ActionError("errors.required","ユーザID"));の意味は~
userIdが、<html:errors property="userId"/>に対応し、"errors.required"がプロパティファイルのキーに対応し"ユーザID"が、{0}に対応しています。

まとめると、errors.add("userId",new ActionError("errors.required","ユーザID"));
で、「errors.required={0} Required」の{0}を「ユーザID」という文字列で置換して
 ユーザID Required
という文字列が生成されます。その文字列が、、<html:errors property="userId"/>と書いた箇所に表示されます。

なんか、ややこしいですね。

----
#comment

#navi(Struts)

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

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