GWT ValueListBox,Renderer和ProvideKey

时间:2012-04-12 01:12:51

标签: gwt

如何在具有特定对象列表的编辑器中实现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

1 个答案:

答案 0 :(得分:2)

问题是您正在尝试使用address.countryCode的编辑器编辑Country(查看路径注释)。 要使其发挥作用,您应该将路径更改为address.country并在address.countryCode之后分配editorDriver.flash()。类似的东西:

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

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

您可能认为ValueListBox的工作方式类似于将密钥分配给属性的经典select。这里分配了整个对象。因此,在您的情况下,Country对象无法分配给address.countryCode,反之亦然。

顺便说一下。您可以更正渲染器(如下面的代码),并将null个对象作为渲染器密钥提供程序中的参数。

new Renderer<Country>() {
...
            @Override
            public void render(Country object, Appendable appendable)
                    throws IOException {
                appendable.append(render(object));
            }
...
}