Jenkins-Plugin:保存并加载配置对话框后,可选块和它的嵌套单选按钮不会保留

时间:2014-08-27 13:17:40

标签: java jenkins jenkins-plugins jelly

我试图开始使用Jenkins插件开发,并且对插件的全局配置的持久性有一些小问题。

有问题的选项是带有2个嵌套单选按钮的可选块,您可以在插件的global.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:section title="Hello World Builder">
    <f:optionalBlock name="useForeignLanguage" title="Use foreign language" checked="useForeignLanguage">
      <f:entry title="Language to use" field="useLanguage"
        description="Check if we should say hello in another language">
        <f:radio name="useLanguage" title="French" value="fr" />
        <f:radio name="useLanguage" title="Japanese" value="jp" />
      </f:entry>
    </f:optionalBlock>
  </f:section>

</j:jelly>

相关的Java代码如下:

public class HelloWorldBuilder extends Builder {
    //...
    @Extension
    public static final class Descriptor extends BuildStepDescriptor<Builder> {
        private boolean useForeignLanguage;
        private String  useLanguage;

        public Descriptor() {
            load();
        }

        @Override
        public boolean configure( final StaplerRequest req, final JSONObject formData ) throws FormException {
            // To persist global configuration information,
            // set that to properties and call save().
            final JSONObject languageJSON = formData.getJSONObject( "useForeignLanguage" );
            if ( ( languageJSON != null ) && !( languageJSON.isNullObject() ) ) {
                this.useLanguage = languageJSON.getString( "useLanguage" );
                this.useForeignLanguage = true;
            } else {
                this.useLanguage = null;
                this.useForeignLanguage = false;
            }
            save();
            return super.configure( req, formData );
        }

        public String getUseLanguage() {
            return this.useLanguage;
        }

        public boolean getUseForeignLanguage() {
            return this.useForeignLanguage;
        }

        //...
    }
}

配置本身在xml中保存得很好,每次保存配置时都会加载,所以我猜问题就在于加载和填充表单模块:

<?xml version='1.0' encoding='UTF-8'?>
<bar.foo.testing.HelloWorldBuilder_-Descriptor plugin="YetAnotherPluginTest@1.0-SNAPSHOT">
  <useForeignLanguage>true</useForeignLanguage>
  <useLanguage>jp</useLanguage>
</bar.foo.testing.HelloWorldBuilder_-Descriptor>

感谢您提前提供任何帮助

1 个答案:

答案 0 :(得分:1)

更新果冻修复了问题:

<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:section title="Hello World Builder">
    <f:optionalBlock name="useForeignLanguage" title="Use foreign language" checked="${instance.useForeignLanguage}">
      <f:entry title="Language to use" field="useLanguage" description="Check if we should say hello in another language">
          <f:entry>
            <f:radio name="useLanguage" title="French" value="fr" checked="${instance.useLanguage == 'fr'}" />
          </f:entry>
          <f:entry>
            <f:radio name="useLanguage" title="Japanese" value="jp" checked="${instance.useLanguage == 'jp'}" />
          </f:entry>
      </f:entry>
    </f:optionalBlock>
  </f:section>

</j:jelly>