SAStruts/errorメッセージをEL式で使う

SAStruts/errorメッセージをEL式で使う

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 渡して表示を制御するようなこともできるだろう

Tag

java/sastruts/to_use_error_message_at_el.txt · 最終更新: 2018-01-04 17:42 by ore