tohokuaikiのチラシの裏

技術的ネタとか。

ConfluenceのXWorkによるプラグイン作成における値チェック(Validator)の方法が少なくてガッカリした

基本的な使い方

atlassian-plugin.xml にて、インターセプターでActionに対してvalidatingStackにしておく。

<package name="jpages" extends="default" namespace="/pages">
    <!-- default-interceptor-ref name="defaultStack"/ -->
    <default-interceptor-ref name="validatingStack"/>
    <action name="mycustom"class="com.example.confluence.plugin.FooAction">

すると、execute()する前にvalidate()メソッドを実行する。

このメソッドでaddFieldError()/addActionError()によりエラーが積まれた場合は、executeしないでINPUTを返す。

かなりがっかりした件

Confluenceが使っているActionフレームワークは、XWorkであってXWork2ではないし、ましてやStruts2でもない。これらのノウハウが使えたら、FooAction-validation.xmlとか、アノテーションによるValidateができるのになーとか思っていた。

実際、Confluenceの内部(例えば、一般設定値を入力するところ)では***-validation.xmlによるバリデートが行われているようである。
java/com/atlassian/confluence/admin/actions/GeneralConfigurationAction.java
に対する
etc/java/com/atlassian/confluence/admin/actions/GeneralConfigurationAction-validation.xml
とか。

ただ、これをプラグインに適用できるかというとそうではないみたいで、***-validation.xmlをどこにおいても全く反応してくれない。

アノテーションによる方法も、そもそもXWorksで導入されたようでXWorkのConfluenceには関係なかったという話。