J'ai une disposition avec plusieurs composants (4 champs de texte et 2 zones de liste déroulantes). Ce est ainsi défini:Afficher le nom de l'objet de propriété au lieu de l'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
est utilisé pour extraire des données de base de données:
beanItemContainer = new BeanItemContainer<>(Manufacturer.class, manRepo.findAll());
manCombo.setContainerDataSource(beanItemContainer);
Ca ne me dérange pas glassCombo
car il a des données constantes et travaux de liaison y bien.
Voilà comment je lier des champs:
// binding data to fields
BeanFieldGroup binder = new BeanFieldGroup<>(InteriorDoor.class);
binder.setItemDataSource(interiorDoor);
binder.setBuffered(false);
binder.bindMemberFields(this);
Jusqu'à présent, si bon, mais quand il arrive aux champs de câblage, il vient gros problème avec manCombo
- lors de la sélection élément de combobox, je reçois ce
causée par: com.vaadin.data.util.converter.Converter $ ConversionException: Impossible de convertir la valeur à long à com.vaadin.ui.AbstractField.convertToModel (AbstractField.java:778) ~ [Vaadin-serveur -7.7.5.jar: 7.7.5] à com.vaadin. ui.AbstractField.convertToModel (AbstractField.java:755) ~ [vaadin-server-7.7.5.jar: 7.7.5] à l'adresse com.vaadin.ui.AbstractField.setValue (AbstractField.java:539) ~ [vaadin- server-7.7.5.jar: 7.7.5] ... 49 images courantes omises Causée par: com.vaadin.data.util.converter.Converter $ ConversionException: Impossible de convertir la valeur de type .domain.Manufacturer en modèle tapez la classe java.lang.Long. Aucun convertisseur n'est défini et les types ne sont pas compatibles. à com.vaadin.data.util.converter.ConverterUtil.convertToModel (ConverterUtil.java:182) ~ [vaadin-server-7.7.5.jar: 7.7.5] à com.vaadin.ui.AbstractField.convertToModel (AbstractField.java:775) ~ [Vaadin-server-7.7.5.jar: 7.7.5] ... 51 cadres communs omis
S'il vous plaît aider
PS J'ai essayé de jeter comme (((Manufacturer).getValue).getId()
mais il n'a aucun effet
MISE À JOUR 1
La solution @Marco C ne fonctionne pas. Maintenant, sur l'appel mise en page je reçois ceci:
java.lang.NullPointerException: null à java.lang.Class.isAssignableFrom (Native Method) ~ [na: 1.8.0_121] à com.vaadin.data. util.converter.ConverterUtil.canConverterPossiblyHandle (ConverterUtil.java:243) ~ [vaadin-server-7.7.5.jar: 7.7.5] à com.vaadin.ui.AbstractField.setPropertyDataSource (AbstractField.java:649) ~ [vaadin-server-7.7.5.jar: 7.7.5] au com.vaadin.data.fieldgroup.FieldGroup.bind (FieldGroup.java:272) ~ [vaadin-server-7.7.5.jar: 7.7 .5] à com.vaadin.data.fieldgroup.BeanFieldGroup.bind (BeanFieldGroup.java:155) ~ [vaadin-server-7.7.5.jar: 7.7.5] à com.vaadin.data.fieldgroup.FieldGroup.buildAndBindMemberFields (FieldGroup.java:1011) ~ [vaadin-server-7.7.5.jar: 7.7.5] à com.vaadin.data.fieldgroup.FieldGroup.bindMemberFields (FieldGroup.java:856) ~ [vaadin-server-7.7.5.jar: 7.7.5] à com.reborn.doorshop.ui .components.InteriorEditor.editEntity (InteriorEditor.java: 156) ~ [classes /: na] à com.reborn.doorshop.ui.views.InteriorView.lambda $ initComponents $ 61446b05 $ 1 (InteriorView.java:53) ~ [classes /: na] au soleil. reflect.NativeMethodAccessorImpl.invoke0 (native Method) ~ [na: 1.8.0_121] à sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
MAJ2:
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;
}
});
Il est étrange que cela ne fonctionne pas. J'ai essayé et c'était bien. De la stacktrace semble que ** getModelType ** dans le convertisseur renvoie null. Pouvez-vous poster votre code de convertisseur? –
Il ressemble exactement à ce que vous avez posté. J'ai essayé plusieurs options. Etes-vous sûr qu'il ne doit y avoir que deux méthodes de remplacement au lieu de quatre? – Reborn
désolé, édité ma réponse. Toutes les méthodes doivent être mises en œuvre, je les ai laissées sur l'exemple de code –