我有一个hudson.model.ManagementLink
(创建一个可以通过 Manage Jenkins 访问的页面。
我有一些表单字段,我想使用f:validateButton
进行验证。如果要在config.jelly
(具有描述符)的Publisher
页面上完成此操作,则简单的doXXX()
方法将在描述符中起作用。
如果我直接向doXXX()
添加类似的hudson.model.ManagementLink
方法,则实际上可以通过网址 myPage / myMethod 直接访问,但f:validateButton
只返回一个404显然我需要发送表单值。
我遇到的一个可能的解决方案是withCustomDescriptorByName,并且我在别处有一个描述符中的逻辑,但是我无法让它工作。
答案 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)