menu
書いてる野郎
orebike@gmail.com
Formでのエラーメッセージは通常
<html:errors property="hoge" />
のようにtaglibを使って出力する。
この出力。若干タグ情報がくっついてきたり、個別に列挙できなかったりと少々使い勝手がよくない。なのでラッパーを作る
このエラーメッセージというのは構造が複雑になっていて、一発できれいに組み立てることができない。 まずエラーメッセージの種であるActionMessagesを取得する。コレ自体は、requestスコープかsessionスコープに格納されているので、DIcontainer管理のオブジェクトから取り出す。 この時点ではエラーメッセージは完全に組み立てられておらず、resourceとkeyと全てバラバラなので、自前で組み立てる。
ActionMessages errors = (ActionMessages) session.getAttribute(Globals.ERROR_KEY); Iterator<ActionMessage> amIter = errors.get(); Iterator<String> propIter = errors.properties(); while(amIter.hasNext()){ ActionMessage am = (ActionMessage) amIter.next(); String propertyName = propIter.next(); MessageResources mr = Resources.getMessageResources(request); errorMap.put(propertyName, mr.getMessage(am.getKey(), am.getValues())); }
ここで作ったmapをJSPに持っていけば
<html:errors property="hoge" /> ${ errorMap.hoge }
で取り出せる。これには余計なタグはついていない。
このやり方で実装すれば、JSON でその検証結果を JavaScript 渡して表示を制御するようなこともできるだろう