0

私は次の問題に直面しました:

gxt グリッドで CRUD 操作を作成したいのですが、そのような状況に遭遇しました:sexフィールドをRadioGroupフォーム上に作成し、create操作用のコンバーター (以下のコード) を作成したため、正常に動作します (エンティティーとコンバーターのコードは以下)。 ):

private Long id;
private String name;
private String sex;

formBinding.getBinding(radioGroup).setConverter(new Converter() {
        @Override
        public Object convertFieldValue(Object value) {
            return ((Radio) value).getData("value");
        }
});

私のフォームにラジオグループを追加するためのコードは次のとおりです。

Radio radio = new Radio();
radio.setBoxLabel("M");
radio.setData("value", "M");
Radio radio2 = new Radio();
radio2.setBoxLabel("F");
radio.setData("value", "F");

radioGroup = new RadioGroup();
radioGroup.setSelectionRequired(true);
radioGroup.setFieldLabel("Sex");
radioGroup.add(radio);
radioGroup.add(radio2);
radioGroup.setName("sex");
simplePanel.add(radioGroup, formData);

値を String から radio に変換し、 に設定する必要がありradiogroupます。しかし、反対の操作、つまり編集を書き込もうとすると、次のような例外がスローされます。

11:52:23.381 [ERROR] [hellogxt] Uncaught exception escaped
java.lang.ClassCastException: java.lang.String cannot be cast to com.extjs.gxt.ui.client.widget.form.Radio
    at com.extjs.gxt.ui.client.widget.form.RadioGroup.setValue(RadioGroup.java:1)
    at com.extjs.gxt.ui.client.binding.FieldBinding.updateField(FieldBinding.java:207)
    at com.extjs.gxt.ui.client.binding.FieldBinding.bind(FieldBinding.java:82)
    at com.extjs.gxt.ui.client.binding.Bindings$1.execute(Bindings.java:92)
    at com.google.gwt.user.client.CommandExecutor.doExecuteCommands(CommandExecutor.java:310)
    at com.google.gwt.user.client.CommandExecutor$2.run(CommandExecutor.java:205)
    at com.google.gwt.user.client.Timer.fire(Timer.java:149)
    at sun.reflect.GeneratedMethodAccessor35.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337)
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:213)
    at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
    at java.lang.Thread.run(Thread.java:722)

コンバーターにいくつかの機能を追加しようとしましたが、バインダーがコードを呼び出さないようです (フォームバインダーは編集操作でメソッドにまったくステップ インしません)。

4

1 に答える 1

0

コードの 1 つのブロックには、次のものがあります。

radio.setData("value", "M");

その後、次のようになります。

        return ((Radio) value).getData("value");

"M"key を使用して文字列 (つまり ) をデータに入れているため"value"、もう一度読み戻すと、同じ文字列が得られます。にキャストするとすぐに、次のRadio例外が発生します。

java.lang.ClassCastException: java.lang.String を com.extjs.gxt.ui.client.widget.form.Radio にキャストできません

すでにオブジェクトを持っているので、Radioとにかくa にキャストする意味があるかどうかはわかりません-それが必要な場合は、単に返さないのはなぜですか? ただし、その場合は、 a はまったく必要ありません。代わりに、おそらくその文字列が必要なので、にキャストしないでください。RadiovalueConverterRadio

于 2013-03-12T01:10:27.340 に答える