横断的関心事を処理したいがために書いた
T2用PluginでAfterActionのIntercepter(?)が上手く動かなかった。
package test.plugin;『BEFORE ACTION!』は表示されるが『AFTER ACTION!』が出ない・・import org.t2framework.commons.meta.MethodDesc;
import org.t2framework.t2.action.ActionContext;
import org.t2framework.t2.plugin.AbstractPlugin;
import org.t2framework.t2.spi.Navigation;public class TestPlugin extends AbstractPlugin{
@Override
public Navigation beforeActionInvoke(ActionContext actionContext,
MethodDesc targetMethod, Object page, Object[] args) {
System.out.println("BEFORE ACTION!");
return getPluginDefaultNavigation();
}@Override
public Navigation afterActionInvoke(ActionContext actionContext,
MethodDesc targetMethod, Object page, Object[] args) {
System.out.println("AFTER ACTION!");
return getPluginDefaultNavigation();
}
}
公式wikiを読んでもそもそもpluginの実装の仕方は書いてなかったが、
メーリングリストを漁ったら解決。
0.6.1→0.6.2の間にafterActionInvokeの引数が増えたみたい。
@Overrideこうすると期待通りに動く。が、Pageを呼び出すたびに
public Navigation afterActionInvoke(ActionContext actionContext,
MethodDesc targetMethod, Object page, Object[] args,
Navigation result) {
System.out.println("AFTER ACTION!");
if (result == null) {
return afterActionInvoke(actionContext, targetMethod, page, args);
} else {
return getPluginDefaultNavigation();
}
}
beforeActionInvoke内の処理とslf4jのログの出力(INFO: リクエストを処理するPageクラスを
検出しました。ってやつ)の順番が前後して一定しない・・
資料があまりなくて(調整中だから?)よく理解できないのでやりたかったこと(認証)は
当面はコンテナのfilterで実装することにした。
因みにDIコンテナを使わずにPluginを差し込むにはWEB-XMLに
みたいに書けばいいみたい。複数登録の際は『,』区切り。
t2
org.t2framework.t2.filter.T2Filter
t2.rootpackage
test.page
t2.exclude-resources
css, js, png, gif, jpg
t2.components
test.plugin.TestPlugin
param-nameをt2.componentsとすればOK。
※クラスが見つからなくてもエラーにならないっぽいのでタイポに注意