Top / Struts / Validateのやり方

ユーザ入力値は必ず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"/>と書いた箇所に表示されます。

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


この記事は

選択肢 投票
おもしろかった 1  
そうでもない 0  

#navi(contents-page-name): No such page: Java/Struts

現在のアクセス:55465


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