Hi noble Jenkins developers!
It's quite easy to update one simple select (<f:select />) when another is changed (see DynamicDropDownListBox from Jenkins UI Samples plugin). But what about case when there are two <f:dropdownList/> elements?
I have used DropdownList from UI Samples as a sample to create these:
<f:block>
<table>
<j:set var="currentArtifactDefinition" value="${instance.artifacts}"/>
<f:dropdownList name="artifacts" title="Artifact">
<j:forEach var="desc" items="${descriptor.artifactDescriptors}" varStatus="loop">
<j:set var="artifactDescription" value="${
desc.class.name==currentArtifactDefinition.artifactsClassName?currentArtifactDefinition:null}"/>
<f:dropdownListBlock title="${desc.displayName}" value="${loop.index}" selected="${artifactDescription!=null}" staplerClass="${
desc.entityClass.name}">
<st:include page="${desc.configPage}" from="${desc}"/>
</f:dropdownListBlock>
</j:forEach>
</f:dropdownList>
</table>
</f:block>
<f:block>
<table>
<j:set var="currentScheduleDefinition" value="${instance.schedule}"/>
<f:dropdownList name="schedule" title="Schedule">
<j:forEach var="desc" items="${descriptor.scheduleDescriptors}" varStatus="loop">
<j:set var="scheduleDescription" value="${
desc.class.name==currentScheduleDefinition.scheduleClassName?currentScheduleDefinition:null}"/>
<f:dropdownListBlock title="${desc.displayName}" value="${loop.index}" selected="${scheduleDescription!=null}" staplerClass="${
desc.entityClass.name}">
<st:include page="${desc.configPage}" from="${desc}"/>
</f:dropdownListBlock>
</j:forEach>
</f:dropdownList>
</table>
</f:block>
There are two methods in Descriptor of the build step that has this config.jelly, they provide the data for both dropdowns:
public DescriptorExtensionList<MyBuildStep.ScheduleDefinition, Descriptor<MyBuildStep.ScheduleDefinition>> getScheduleDescriptors() {
return Jenkins.getInstance().getDescriptorList(MyBuildStep.ScheduleDefinition.class);
}
public DescriptorExtensionList<MyBuildStep.ArtifactDefinition, Descriptor<MyBuildStep.ArtifactDefinition>> getArtifactDescriptors() {
return Jenkins.getInstance().getDescriptorList(MyBuildStep.ArtifactDefinition.class);
}
But how can I handle the change event in the first one to customize the selection in the second one?