今回は、下記のような感じのネストされた設定画面を作るときの定石をまとめます。
チェックボックスをクリックすると、、
ネストされた設定が現れる、こんな感じです。
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側です。以下のように記述します。
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) { // targetProjectsは、ココを通らなければ初期値に戻る。 this.addresses = useMail.addresses; } } @Override public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException { if (useMail == null) { // チェックボックスがOffの時の処理 } else { // チェックボックスがOnなので、なかの値にアクセスしてなんか処理する } return true; } // Overridden for better type safety. // If your plugin doesn't really define any property on Descriptor, // you don't have to do this. @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にすることで、データが渡されてきます。
この記事は
現在のアクセス:2075