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