Top / Java / Jenkins / プラグイン開発のTIPS集 / config.jellyでネストされた設定画面を作る

今回は、下記のような感じのネストされた設定画面を作るときの定石をまとめます。

01.png

チェックボックスをクリックすると、、

02.png

ネストされた設定が現れる、こんな感じです。

画面側

config.jellyは以下のように記述します。

<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" 
 xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">

<f:block>
  <table>
  <f:optionalBlock name="useMail" title="チェック結果をメールで送信する" 
       checked="${instance.addresses!=null}" >
  <f:entry title="メール送信先" field="addresses" 
       description="チェック結果をメール送信する宛先をカンマ区切りで指定してください。">
    <f:textarea />
  </f:entry>
    </f:optionalBlock>
  </table>
</f:block>
</j:jelly>

基本的にはこれだけで画面が構成されるはずです。

Java(Builder)側

次に画面から入れられた値を保持したり使用したりするJava側です。以下のように記述します。

public class Test2Builder extends Builder {

    // ネストしたテキストボックスを作成するときの定石。
    private final EnableUseMailTextBlock useMail;

    public static class EnableUseMailTextBlock {
        private String addresses;

        @DataBoundConstructor
        public EnableUseMailTextBlock(String addresses) {
            this.addresses = addresses;
        }
    }

    private String addresses;

    public String getAddresses() {
        return addresses;
    }

    @DataBoundConstructor
    public Test2Builder(EnableUseMailTextBlock useMail) {
        this.useMail = useMail;
        if (useMail != null) {
            this.addresses = useMail.addresses;
        }
    }
     @Override
    public boolean perform(AbstractBuild build, Launcher launcher,
            BuildListener listener) throws InterruptedException, IOException {

        if (useMail == null) {
            // チェックボックスがOffの時の処理
        } else {
            // チェックボックスがOnなので、なかの値(addresses)にアクセスしてなにか処理する
         }
        return true;
    }

    @Override
    public DescriptorImpl getDescriptor() {
        return (DescriptorImpl) super.getDescriptor();
    }
   
   // Descriptorは省略
}

Jenkinsは画面のパラメタとJavaの世界を @DataBoundConstructor? で紐付けますが*1

@DataBoundConstructor
public Test2Builder(EnableUseMailTextBlock useMail) {
    this.useMail = useMail;
    if (useMail != null) {
        this.addresses = useMail.addresses;
    }
}

public static class EnableUseMailTextBlock {
    private String addresses;

    @DataBoundConstructor
    public EnableUseMailTextBlock(String addresses) {
        this.addresses = addresses;
    }
}

このようにネストされた Javaクラス EnableUseMailTextBlock? を作成しビルダのコンストラクタに指定します。EnableUseMailTextBlock? クラスのコンストラクタの引数もconfig.jellyにそろえてaddressesにすることで、データが渡されてきます。


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / Java / Jenkins / プラグイン開発のTIPS集 / config.jellyでネストされた設定画面を作る

現在のアクセス:872


*1 詳細はプラグイン開発を参照

添付ファイル: file03.png 93件 [詳細] file02.png 171件 [詳細] file01.png 198件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-10-11 (日) 13:28:49 (1407d)