Jenkins:在没有Descriptor的类上使用validateButton

时间:2014-05-14 10:58:10

标签: java jenkins jelly

我有一个hudson.model.ManagementLink(创建一个可以通过 Manage Jenkins 访问的页面。

我有一些表单字段,我想使用f:validateButton进行验证。如果要在config.jelly(具有描述符)的Publisher页面上完成此操作,则简单的doXXX()方法将在描述符中起作用。

如果我直接向doXXX()添加类似的hudson.model.ManagementLink方法,则实际上可以通过网址 myPage / myMethod 直接访问,但f:validateButton只返回一个404显然我需要发送表单值。

我遇到的一个可能的解决方案是withCustomDescriptorByName,并且我在别处有一个描述符中的逻辑,但是我无法让它工作

1 个答案:

答案 0 :(得分:2)

要回答上面的实际问题(即没有描述符),您可以提供验证所需的任何字段with f:validateButton(逗号分隔),然后设置method属性对以下内容......

method="${it.fullURL}triggerOfficial"

...然后在java(it)中有一个方法......

public String getFullURL(){
    return Stapler.getCurrentRequest().getOriginalRequestURI().substring(1);
}

...然后也是执行验证的方法......

public FormValidation doTriggerOfficial() { 
    return FormValidation.ok("hello");
}

但是,如果要对通常没有描述符的类类型执行常规字段验证(没有validateButton)...

1)将implements Describable<YourClassName>添加到您的班级签名

2)添加这样的东西......

@SuppressWarnings("unchecked")
@Override
public Descriptor<ConfigLink> getDescriptor() {
    Jenkins jenkins = Jenkins.getInstance();
    if (jenkins == null) {
        throw new IllegalStateException("Jenkins has not been started");
    }
    return jenkins.getDescriptorOrDie(getClass());
}

3)加上一个内部类(使用正常的doCheckXXX方法)

@Extension
public static final class DescriptorImpl extends Descriptor<YourClassName> {...}

4)然后最后将它在果冻添加属性descriptor="${it.descriptor}"中链接到包含您想要自动验证的表单元素的f:form标记(这将调用getDescriptor详细信息在步骤2)