如何从ValueListBox值中删除空值

13

我是GWT的新手。我正在编写一个简单的GWT程序,需要使用组合框,我使用了ValueListBox的实例。在这个组合框中,我需要列出代表一年中月份的1到12的数字。但是组合框会在末尾添加null值。请问有人能帮忙告诉我如何移除这个null值吗?

    final ValueListBox<Integer> monthCombo = new ValueListBox<Integer>(new Renderer<Integer>() {

            @Override
            public String render(Integer object) {
                return String.valueOf(object);
            }

            @Override
            public void render(Integer object, Appendable appendable) throws IOException {
                if (object != null) {

                    String value = render(object);
                    appendable.append(value);
                }
            }
        });
    monthCombo.setAcceptableValues(getMonthList());
    monthCombo.setValue(1);

    private List<Integer> getMonthList() {
        List<Integer> list = new ArrayList<Integer>();

        for (int i = 1; i <= 12; i++) {
            list.add(i);
        }

        return list;
    }

输入图像说明

2个回答

25

在调用 setAcceptableValues 方法之前,请先调用 setValue 方法。

原因是当您调用 setAcceptableValues 方法时,值是 null 的,而 ValueListBox 会自动将任何值(通常传递给 setValue 方法的值)添加到可接受值列表中(从而实际上设置了该值,并且可以被用户选择,并且如果她选择了另一个值并希望返回原始值,则可以重新选择)。首先使用将出现在可接受值列表中的值调用 setValue 方法可以消除此副作用。

请参见http://code.google.com/p/google-web-toolkit/issues/detail?id=5477


1
我刚才在之前一个类似的问题上引用了你的答案,哈哈 :) - Adel Boutros
3
我尝试了一下,但是它没有起作用。我仍然看到null...感觉这真的是一个bug而不是一个功能。我正在运行2.5-rc1版本。 - Travis Webb
1
@ThomasBroyer:如果我们事先不知道任何可接受的值,该怎么办?如果我们只想要可接受的值,而没有空值或空字符串,应该如何使用它?更新:我看到建议使用setAcceptableValues(Collections.emptyList());,但这并没有起作用。 - foamroll

2
从这个问题中引用:

注意,setAcceptableValues会自动将当前值(由getValue返回,默认为null)添加到列表中(如果需要,setValue也会自动将该值添加到可接受值的列表中)

因此,请尝试按以下方式反转调用setValue和setAcceptableValues的顺序:

monthCombo.setValue(1);
monthCombo.setAcceptableValues(getMonthList());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接