我有一个hudson.model.ManagementLink(可创建一个页面,可以通过 Manage Jenkins 进行访问。
hudson.model.ManagementLink
我有一些要使用验证的表单字段f:validateButton。如果要在(具有描述符的)config.jelly页面上执行此操作,则可以在Publisher描述符中使用一种简单的doXXX()方法。
f:validateButton
config.jelly
Publisher
doXXX()
如果我doXXX()直接向hudson.model.ManagementLink其中添加类似的方法,则实际上可以直接通过URL myPage / myMethod访问, 但是该方法f:validateButton仅返回404,显然我需要发送表单值。
我遇到的一个潜在解决方案是CustomDescriptorByName,并将逻辑包含在我在其他地方拥有的描述符中, 但是我无法使其正常工作 。
为了回答上面的实际问题(即没有描述符),您可以向(以逗号分隔的)with属性提供验证所需的任何字段,f:validateButton然后将该method属性设置为类似于以下内容…
with
method
method="${it.fullURL}triggerOfficial"
…然后在java(it)中有一个方法…
it
public String getFullURL(){ return Stapler.getCurrentRequest().getOriginalRequestURI().substring(1); }
…然后还有执行验证本身的方法…
public FormValidation doTriggerOfficial() { return FormValidation.ok("hello"); }
但是,如果要对通常没有描述符的类类型执行常规字段验证(不使用validateButton)…
1)添加implements Describable<YourClassName>到您的班级签名
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方法)
doCheckXXX
@Extension public static final class DescriptorImpl extends Descriptor<YourClassName> {...}
4)然后最后将其在jelly add属性中链接descriptor="${it.descriptor}"到f:form包含您要自动验证的表单元素的标签(这将调用getDescriptor步骤2中的详细信息)
descriptor="${it.descriptor}"
f:form
getDescriptor