3

オブジェクトの特定のリストを使用してエディター内にGWTValueListBoxを実装する方法、私のコード:

...
@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。これを機能させるには、パスを変更し、 afteraddress.countryの割り当てを行う必要があります。何かのようなもの:address.countryCodeeditorDriver.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));
            }
...
}
于 2012-04-12T09:18:56.843 に答える