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