// 下階層用テンプレート #topicpath ---- //ここにコンテンツを記述します。 #contents 今回は、下記のような感じのネストされた設定画面を作るときの定石をまとめます。 #ref(01.png) チェックボックスをクリックすると、、 #ref(02.png) ネストされた設定が現れる、こんな感じです。 **画面側 [#tbc8ba99] 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)側 [#l0e22710] 次に画面から入れられた値を保持したり使用したりする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は、ココを通らなければ初期値に戻る。 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なので、なかの値にアクセスしてなんか処理する // チェックボックスがOnなので、なかの値(addresses)にアクセスしてなにか処理する } 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は省略 // Descriptorは省略 } Jenkinsは画面のパラメタとJavaの世界を @DataBoundConstructor で紐付けますが((詳細は[[プラグイン開発>Java/Jenkins/プラグイン開発#p9ad086d]]を参照)) @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にすることで、データが渡されてきます。 ---- この記事は #vote(おもしろかった,そうでもない) #comment #topicpath SIZE(10){現在のアクセス:&counter;}