gpt4 book ai didi

java - 将 ComboBox 值设置为 null 后如何清除该字段?

转载 作者:行者123 更新时间:2023-12-02 01:29:21 26 4
gpt4 key购买 nike

我有一个名为projectRequirementComboBox的组合框,它依赖于projectComboBox,从那里我可以获取要在projectRequirementComboBox的下拉列表中显示的列表,但我想做类似的事情:当用户更改项目时,我想清空projectRequirementComboBox,以更清楚的是,没有任何项目不会被选择我现在正在这样做,但我的projectRequirementComboBox仍然具有旧值,我不知道我错过了什么。我正在使用 vaadin.version 8.0.7 。

private void refreshProjectRequirementCombobox()
{
List<ProjectRequirement> projectRequirements = new ArrayList<>();
if (projectComboBox.getValue() != null)
{
projectRequirements = projectRequirementService.findCurrentProjectRequirements(projectComboBox.getValue().getProjectId());
}
projectRequirementComboBox.setItems(projectRequirements);
projectRequirementComboBox.setValue(null);

}

private void loadProjectRequirement(Project project)
{
List<ProjectRequirement> projectRequirements = new ArrayList<>();
if (project != null)
{
projectRequirements = projectRequirementService.findCurrentProjectRequirements(project.getProjectId());
}
projectRequirementComboBox.setItems(projectRequirements);
}

我在这里调用refreshProjectRequirementCombobox。

 projectComboBox.addValueChangeListener(event ->
{
refreshProjectRequirementCombobox();
loadRejectReason();
});

最佳答案

通常情况下这应该有效。我创建了一个带有两个组合框“主”和“从属”的最小示例。从属 ComboBox 的选择取决于主 ComboBox 的选择。因此,主 ComboBox 上有一个 ValueChangeListener,用于重置从属 ComboBox 的项目和选定值。当您启动应用程序时,您会看到依赖的 ComboBox 提供的项目发生变化,并且没有选择这些新项目。

我认为您必须发布更多代码(您从哪里调用 refreshProjectRequirementCombobox?)来看看您做了什么不同的事情。

这是我的示例最小项目代码:

@Override
protected void init(VaadinRequest vaadinRequest) {
final VerticalLayout layout = new VerticalLayout();
final ComboBox<String> main = new ComboBox<>();
final ComboBox<String> dependent = new ComboBox<>();
final Map<String, String[]> dependentsByMain = new HashMap<>();
dependentsByMain.put("A", new String[]{"AA", "AB", "AC"});
dependentsByMain.put("B", new String[]{"BA", "BB", "BC"});
dependentsByMain.put("C", new String[]{"CA", "CB", "CC"});

List<String> mainItems = new ArrayList<>(dependentsByMain.keySet());
main.setItems(mainItems);
dependent.setItems(Arrays.asList("Test1", "Test2", "Test3"));
dependent.setValue("Test1");
main.addValueChangeListener((HasValue.ValueChangeListener<String>) valueChangeEvent -> {
if (valueChangeEvent.getValue() != null) {
dependent.setItems(dependentsByMain.get(valueChangeEvent.getValue()));
dependent.setValue(null);
}
});
layout.addComponents(main, dependent);
setContent(layout);
}

更新:

看看 Srinivasan Sekar 的回答及其评论。这是使用版本(8.0.7)中的一个错误,似乎在版本 8.5 中已修复(根据 https://github.com/vaadin/framework/issues/9047#issuecomment-437864866 )。我尝试使用版本 8.7.1 的示例代码,它可以工作。 8.0.7 版本则不然。

所以主要的解决方案是更新使用的Vaadin版本。作为解决方法(当无法升级 Vaadin 版本时),您首先必须将 ComboBox 的值设置为 null,然后设置新项目。因此,在我的示例中,ValueChangeListener 必须如下所示:

main.addValueChangeListener((HasValue.ValueChangeListener<String>) valueChangeEvent -> {
if (valueChangeEvent.getValue() != null) {
dependent.setValue(null);
dependent.setItems(dependentsByMain.get(valueChangeEvent.getValue()));
}
});

关于java - 将 ComboBox 值设置为 null 后如何清除该字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56360135/

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