gpt4 book ai didi

java - Jenkins:doFill 函数没有正确获取@QueryParameter

转载 作者:搜寻专家 更新时间:2023-11-01 03:04:59 25 4
gpt4 key购买 nike

在过去的 2 天里,我一直在为这个问题绞尽脑汁,但一直未能找到解决方案...

基本上,我有一个有两个下拉列表(果冻标签)的插件。其中一个填充了所有可用的项目类型,另一个填充了适用于先前选择的项目类型的构建器。我正在针对 Jenkins 版本 1.578 构建插件。

这是我的配置果冻:

<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson"
xmlns:f="/lib/form">

<f:entry title="Projectname" field="projectName">
<f:textbox />
</f:entry>
<f:entry title="Build project after creation?" field="runProjectAfterCreation">
<f:checkbox />
</f:entry>

<f:entry title="Project configuration">
<f:entry title="Project / Job Type" field="projectType">
<f:select default="noTypeSelected" name="projectType"/>
</f:entry>

<f:entry title="Build Steps">
<f:repeatable var="buildSteps" items="buildSteps" minimum="1">
<table width="100%" bgcolor="#EEEEEE">
<div width="100%">
<f:entry field="buildStepType">
<f:select default="noBuildStepSelected" />
<f:repeatableDeleteButton value="Delete Build Step" />
</f:entry>
</div>
</table>
</f:repeatable>
</f:entry>

</f:entry>
</j:jelly>

projectType 下拉列表使用此函数可以很好地填充:

public ListBoxModel doFillProjectTypeItems() {
ListBoxModel items = new ListBoxModel();
items.add( "Bitte Projekttyp wählen", "noTypeSelected" );
for ( TopLevelItemDescriptor tliDescriptor : getAvailableJobTypes() ) {
items.add( tliDescriptor.getDisplayName(), tliDescriptor.getId() );
}
return items;

}

但是 buildStepType 没有。

public ListBoxModel doFillBuildStepTypeItems( @QueryParameter( "../projectType" ) final String projectType ) {
ListBoxModel items = new ListBoxModel();
if ( ( !projectType.equals( "noTypeSelected" ) ) && ( !projectType.equals( "hudson.maven.MavenModuleSet" ) ) ) {
try {
for ( BuildStepDescriptor<? extends Builder> buildStep : getAvailableBuilders( (Class<? extends AbstractProject<?, ?>>) Class
.forName( projectType ).asSubclass( AbstractProject.class ) ) ) {
items.add( buildStep.getDisplayName(), buildStep.getId() );
}
} catch ( ClassNotFoundException ex ) {
throw new RuntimeException( ex );
}
// Maven projects will throw a java.lang.ClassNotFoundException
} else if ( projectType.equals( "hudson.maven.MavenModuleSet" ) ) {
items.add( "Mavenprojects are not supported!", "mavenSelected" );
} else {
items.add( "Choose project type first, please!", "noProjectType" );
}
return items;
}

java.lang.reflect.InvocationTargetException 是由以下行中的 NullPointerException 引起的:

if ( ( !projectType.equals( "noTypeSelected" ) ) && ( !projectType.equals("hudson.maven.MavenModuleSet" ) ) )

因为 projectType 为空。显然 @QueryParameter 不会从第一个下拉列表中获取选定的值。不过它确实“知道它在那里”,因为当我选择新的项目类型时会调用该函数。

有人知道这个问题的解决方法吗?

最佳答案

希望这个答案还不算太晚。

可以看到

https://github.com/jenkinsci/jenkins/blob/jenkins-1.578/core/src/main/java/hudson/RelativePath.java

这里是用法:

public ListBoxModel doFillBuildStepTypeItems( 
@QueryParameter("projectType") @RelativePath("..")
final String projectType ) {...}

关于java - Jenkins:doFill 函数没有正确获取@QueryParameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25724820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com