3

如何在具有特定对象列表的编辑器中实现 GWT ValueListBox,我的代码:

...
@UiField(provided = true)
@Path("address.countryCode")
ValueListBox<Country> countries = new ValueListBox<Country>(
        new Renderer<Country>() {

            @Override
            public String render(Country object) {
                return object.getCountryName();
            }

            @Override
            public void render(Country object, Appendable appendable)
                    throws IOException {
                render(object);
            }
        },          
        new ProvidesKey<Country>() {
            @Override
            public Object getKey(Country item) {
                return item.getCountryCode();
            }

        });
...

国家级

public class Country  {
    private String countryName;
    private String countryCode;
}

但是,在 GWT 编译期间,我收到了这个错误:

Type mismatch: cannot convert from String to Country
4

1 回答 1

2

问题是您正在尝试使用编辑器编辑address.countryCode(查看路径注释)Country。要完成这项工作,您应该更改路径address.country并执行address.countryCodeafter的分配editorDriver.flash()。就像是:

Address address = editorDriver.flush();
address.setCountryCode(address.getCountry().getCountryCode());

为了支持这一点,Address 类应该将 Country 对象作为属性。

您可能已经假设 ValueListBox 将像经典的那样工作select,其中键被分配给属性。这里分配了整个对象。所以在你的情况下Country对象不能被分配,address.countryCode反之亦然。

顺便提一句。您可以更正渲染器(如下面的代码)并将null对象作为RendererKey Provider中的参数处理。

new Renderer<Country>() {
...
            @Override
            public void render(Country object, Appendable appendable)
                    throws IOException {
                appendable.append(render(object));
            }
...
}
于 2012-04-12T09:18:56.843 回答