ConfluenceのXWorkによるプラグイン作成における値チェック(Validator)の方法が少なくてガッカリした - tohokuaikiのチラシの裏とか書いたけど、自前のInterceptorを追加できればいいわけで。
で、この記事がピッタリ参考になった。
Can we expand interceptor-stack from Confluence plugin? - Atlassian Answers
そう、自分も
<package name="example" extends="default" namespace="/example"> <interceptors> <interceptor name="timer" class=".."/> <interceptor name="logger" class=".."/> <interceptor-stack name="myStack"> <interceptor-ref name="timer"/>
と書いてた。でも、これはロードされなかった。何故だ!と思ったら
confluence-project/confluence-core/confluence/src/java/com/atlassian/confluence/plugin/descriptor/XWorkModuleDescriptor.java
で、"interceptors"タグを拾ってる箇所が無かったという・・・。
そこで、先述の記事の方は
<package name="example" extends="default" namespace="/example"> <interceptor name="exampleInterceptor" class="com.confluence.plugin.ExampleInterceptor"/> <interceptor-stack name="exampleStack"> <interceptor-ref name="exampleInterceptor"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> <action name="login" class="tutuorial.Login"> <interceptor-ref name="exampleStack"/>
と"interceptors"のラップを解除したらきちんとExampleIntercepterが動いたという。
確かに動いた。試したInterceptorはこんな感じ。
package jp.junoe.confluence.plugins.foo.sample; import com.opensymphony.xwork.ActionInvocation; import com.opensymphony.xwork.interceptor.AbstractLifecycleInterceptor; public class ExampleInterceptor extends AbstractLifecycleInterceptor { public String intercept(ActionInvocation invocation) throws Exception{ System.out.println("intercept処理"); String result_code = invocation.invoke(); System.out.println(result_code); return result_code; } }
で、こっからどうするの・・・?
ここでFormの値をフィルタリングしたり、バリデートしたりしたいんだけど・・・・。