S2AOPを使ってアクションクラスの処理の後処理を追加
jsonをレスポンスで返すのに必要になるんで、
ちょっとseasarでJSONSerializerつかってObjectをJSONにシリアライズしようかと思って
みてみるとdeprecatedされていて、代わりにJSONICを使うようにと書いてました。
http://jsonic.sourceforge.jp/
jsとかで使う用であればこれで簡単にできそう。
他にも、画面とかアクションごとにメタタグの情報を変えたいとかで、
JSON形式で設定ファイルを用意してそこから定義情報を取得してリクエスト
にセットみたいなので作ろうかなと思い、インターセプターでアクションの
後処理で情報を自動取得させて、各アクションの作成者はそこを意識しないで
作れるものを作ってみました。
設定ファイルもこれで、Objectにシリアライズして作れたりとかもできそうだけど、
設定ファイルが増えるなら個人的には定数クラスでいけるなら定数クラス
とかでベタ書きにしたい。。
customizer.diconファイルで、actionCustomizerにaddする
<initMethod name="addCustomizer"> <arg> <component class="org.seasar.framework.container.customizer.AspectCustomizer"> <property name="interceptorName">"hogeInterceptor"</property> </component> </arg> </initMethod>
interceptorパッケージ下に、○○Interceptorを作れば自動で登録してくれる。
アクションで、@Executeメソッドが実行された時のみに適用したかったので、その対応もいれました。
http://d.hatena.ne.jp/idesaku/20081226/1230263190を参照しました。
public class HogeInterceptor extends AbstractInterceptor { @Override public Object invoke(MethodInvocation invocation) throws Throwable { return isExecuteMethod(invocation) ? setHoge(invocation) : invocation .proceed(); } private boolean isExecuteMethod(MethodInvocation invocation) { return invocation.getMethod().isAnnotationPresent(Execute.class); } private Object setHoge(MethodInvocation invocation) throws Throwable { Object result = invocation.proceed(); 〜ここにjsonの設定ファイル読んで、色々リクエストとかに値をセットする〜 return result; } }