私は複数のコンポーネント(4つのtextFieldと2つのコンボボックス)を持つレイアウトを持っています。 これは、定義された方法です:idの代わりにプロパティ項目名を表示
private ManufacturerRepository manRepo;
InteriorDoor interiorDoor;
Manufacturer manufacturer;
ComponentHelper componentHelper;
@PropertyId("width")
private TextField widthField;
@PropertyId("height")
private TextField heightField;
@PropertyId("thickness")
private TextField thicknessField;
@PropertyId("modelName")
private TextField modelName;
@PropertyId("hasGlass")
private ComboBox glassCombo;
@PropertyId("manufacturerId")
private ComboBox manCombo;
private BeanItemContainer<Manufacturer> beanItemContainer;
beanItemContainer
は、データベースからデータをフェッチするために使用されます:それはそこにも一定のデータと結合作品を持っているので
beanItemContainer = new BeanItemContainer<>(Manufacturer.class, manRepo.findAll());
manCombo.setContainerDataSource(beanItemContainer);
約glassCombo
を気にしません。
これは私がフィールドをバインドする方法を示します。これまでのところ
// binding data to fields
BeanFieldGroup binder = new BeanFieldGroup<>(InteriorDoor.class);
binder.setItemDataSource(interiorDoor);
binder.setBuffered(false);
binder.bindMemberFields(this);
とても良いが、それは配線分野に起こったとき、それはmanCombo
で大きな問題になる - コンボボックスから項目を選択すると、私はこの
によって引き起こさ:com.vaadin.data.util.converter.Converter $ ConversionException:com.vaadin.ui.AbstractField.convertToModelでロング に値を変換できませんでした(AbstractField.java:778)〜[vaadin-サーバー-7.7.5.jar:7.7.5] at com.vaadin。 (AbstractField.java:539)〜[vaadin-server-7.7.5.jar:7.7.5] at com.vaadin.ui.AbstractField.setValue(AbstractField.java:539)〜[vaadin- server-7.7.5.jar:7.7.5] ... 49共通フレームが省略されました 原因:com.vaadin.data.util.converter.Converter $ ConversionException:.domain.Manufacturerタイプの値をモデルに変換できませんクラスjava.lang.Longを入力します。コンバータは設定されておらず、タイプは互換性がありません。 at com.vaadin.data.util.converter.ConverterUtil.convertToModel(ConverterUtil.java:182)〜[vaadin-server-7.7.5.jar:7.7.5] at com.vaadin.ui.AbstractField.convertToModel( AbstractField.java:775)〜[vaadin-サーバー-7.7.5.jar:7.7.5] ... 51の共通フレームは、私が
(((Manufacturer).getValue).getId()
としてキャストしようとしたPSを助けてください
を省略したがそれは効果がありません
更新1
@Marco Cの解決策は機能しません。
のjava.lang.NullPointerException: java.lang.Class.isAssignableFrom(ネイティブメソッド)のヌル〜[NA:1.8.0_121] com.vaadin.dataで今すぐレイアウトを呼び出すに私はこれを受信します。 util.converter.ConverterUtil.canConverterPossiblyHandle(ConverterUtil.java:243) 〜[vaadin-server-7.7.5.jar:7.7.5] at com.vaadin.ui.AbstractField.setPropertyDataSource(AbstractField.java:649) 〜[vaadin-server-7.7.5.jar:7.7.5] at com.vaadin.data.fieldgroup.FieldGroup.bind(FieldGroup.java:272) 〜[vaadin-server-7.7.5.jar:7.7 .5] at com.vaadin.data.fieldgroup.BeanFieldGroup.bind(BeanFieldGroup.java:155) 〜[vaadin-server-7.7.5.jar:7.7.5] at com.vaadin.data.fieldgroup.FieldGroup.buildAndBindMemberFields(FieldGroup.java:1011) 〜[vaadin-server-7.7.5.jar: 7.7.5] at com.vaadin.data.fieldgroup.FieldGroup.bindMemberFields(FieldGroup.java:856) 〜[vaadin-server-7.7.5.jar:7.7.5] at com.reborn.doorshop.ui .components.InteriorEditor.editEntity(InteriorEditor。java:156) 〜[classes /:na] com.reborn.doors.ui.views.InteriorView.lambda $ initComponents $ 61446b05 $ 1(InteriorView.java:53) 〜[classes /:na] at sun。 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
でアップデート2:reflect.NativeMethodAccessorImpl.invoke0(ネイティブ 方法)〜[1.8.0_121 NA]:
manCombo.setConverter(new Converter<Object, Long>() {
@Override
public Long convertToModel(Object value, Class<? extends Long> targetType, Locale locale)
throws ConversionException {
if (value == null) {
return null;
}
return ((Manufacturer)value).getId();
}
@Override
public Object convertToPresentation(Long value, Class<?> targetType, Locale locale)
throws ConversionException {
if (value == null) {
return null;
}
return beanItemContainer.getItemIds().stream().filter(m -> value.equals(m.getId()))
.findFirst().orElse(null);
}
@Override
public Class<Long> getModelType() {
return null;
}
@Override
public Class<Object> getPresentationType() {
return null;
}
});
これはうまくいきません。私はそれを試して、大丈夫だった。 stacktraceから、** getModelType **のようにコンバータがnullを返すようです。あなたのコンバータコードを投稿できますか? –
あなたの投稿と同じように見えます。私は複数のオプションを試しました。 4つではなく2つのオーバーライドされたメソッドしか必要ないと確信していますか? – Reborn
申し訳ありませんが、私の答えを編集しました。すべてのメソッドを実装する必要があります。サンプルコード –