小编典典

詹金斯:在没有描述符的类上使用validateButton

jenkins

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

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

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

我遇到的一个潜在解决方案是CustomDescriptorByName,并将逻辑包含在我在其他地方拥有的描述符中,
但是我无法使其正常工作


阅读 327

收藏
2020-07-25

共1个答案

小编典典

为了回答上面的实际问题(即没有描述符),您可以向(以逗号分隔的)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)然后最后将其在jelly
add属性中链接descriptor="${it.descriptor}"f:form包含您要自动验证的表单元素的标签(这将调用getDescriptor步骤2中的详细信息)

2020-07-25