7

Spring 3.1 を使用し、この種のことを考えると:

class Thing {
  public Thing() {}
  public Thing(String someProperty) {}
}

class ThingEditor extends PropertyEditorSupport{
    @Override
    public void setAsText(String text) {
        if (text != null) {
            Thing thing = new Thing(text); // or by using a setter method
            setValue(thing);  

        }

    }
}

class SomeController {
    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(Thing.class, new ThingEditor());
    }
}

String を受け取るコンストラクターを削除しない限り、登録済みのプロパティ エディターが呼び出されないことがわかりましたThing。これは正しいですか?

なぜこれを行い、登録されたエディターを無視するのですか?どうすればこれをやめさせることができますか?

4

2 に答える 2

0

独自のコンストラクターを導入することで、コンパイラーによって生成された既定のコンストラクターを無効にします。モノをインスタンス化できるようにするために、フレームワークではおそらくデフォルトのコンストラクターが必要です。独自のコンストラクターが本当に必要な場合は、フレームワークで使用するパラメーターのないバージョンを提供することもできます。

于 2012-07-02T13:52:19.877 に答える
0

PropertyEditorSupport を登録するときにプロパティ名をロックします。

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(Thing.class, "someProperty", new ThingEditor());
}
于 2016-08-09T09:29:24.340 に答える