【问题标题】:How to validate a form from a config.jelly on Jenkins?如何从 Jenkins 上的 config.jelly 验证表单?
【发布时间】:2024-04-11 20:05:12
【问题描述】:

我可以从 global.jelly 文件中执行此操作,但它不适用于 config.jelly 文件。 以下是创建 global.jelly 文件的过程:

果冻:

<f:entry title="Value" field="value">
    <f:textbox />
</f:entry>

JAVA:

public static final class Descriptor extends BuildStepDescriptor<Builder>{

    //descriptor's code

    /**
     * Performs on-the-fly validation of the form field 'value'.
     * 
     * @param value
     *            This parameter receives the value that the user has typed.
     * @return Indicates the outcome of the validation. This is sent to the
     *         browser.
     */
    public FormValidation doCheckValue(@QueryParameter String value) throws IOException, ServletException {
        if(value.isEmpty()) {
            return FormValidation.warning("You must fill this box!");
        }
        return FormValidation.ok();
    }
}

当果冻代码放在配置文件(config.jelly)中时,这不再适用,无论doCheckValue方法是放在插件类还是它的描述符中。

【问题讨论】:

    标签: java validation plugins jenkins jelly


    【解决方案1】:

    这是 config.jelly 文件的结果。 textbox 有一个附加属性:checkUrl

    果冻:

    <f:entry title="Value" field="value">
        <f:textbox 
            checkUrl="'descriptorByName/NAME_OF_YOUR_JAVA_CLASS/checkValue?value='+escape(this.value)" />
    </f:entry>
    

    注意:this.value 特定于 Javascript。它获取您的value 变量的。不要碰它。

    Java 代码保持不变。

    【讨论】:

    • 我有一个问题。我应该把 类放在哪里?我已按照说明验证插件中的文本字段,但我看到“HTTP ERROR 404 Problem访问/job/jenkins-plugin-test/descriptorByName/TextBoxValueValidationDescriptor/checkValue。原因:未找到由Jetty提供支持://”什么我做错了吗?
    • 小心,Jetty 和 Jelly 不一样。您是否将其作为 Jenkins 插件的一部分来实现?
    • 是的,我有工作的 Jenkins 插件。我想将文本字段的验证添加到 config.jelly
    • 我猜NAME_OF_YOUR_JAVA_CLASS实际上需要是完全限定名,即包括包名。