Re: Model map with enum as a key
Hi! In your first code example you are binding the property model to your config map, using a string key for lookup (“VALUE1”). Since generics in java is mostly syntactic sugar, I think the PropertyModel reads & writes from your config map using a String key. This is why hibernate complains: the map contains a String key instead of an Enum. We use a specialized MapKeyModel in our apps for this: --- import java.util.Map; import org.apache.wicket.model.IModel; public class MapKeyModel implements IModel { private final IModel> mapModel; private final K key; public static MapKeyModel of( IModel> mapModel, K key ) { return new MapKeyModel( mapModel, key ); } public MapKeyModel( IModel> mapModel, K key ) { this.mapModel = mapModel; this.key = key; } @Override public V getObject() { Map map = mapModel.getObject(); return map.get( key ); } @Override public void setObject( V object ) { Map map = mapModel.getObject(); map.put( key, object ); } @Override public void detach() { mapModel.detach(); } } --- Met vriendelijke groet, Kind regards, Bas Gooren Op 4 februari 2019 bij 13:51:28, Zbynek Vavros (zbynekvav...@gmail.com) schreef: I got this class that has map with enums as keys: public class MasterClass { private Map config = Maps.newHashMap(); } enum is classic: public enum MyEnum { VALUE1, VALUE2 } now I would like to use one entry of this map as a model for TextField: new RequiredTextField<>("componentId", new PropertyModel<>(modelObject.getConfig(), "VALUE1"))) but when saved to DB Hibernate says the key is String and Enum is expected: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum Using ChainingModel or Model.of(modelObject.getConfig().get(MyEnum.VALUE1))) causes the value not to be bind at all. I know I can use "side" property and fill this map manually in onSubmit just before saving to DB but would like to avoid that. Thanks
Re: Model map with enum as a key
you are saving the value and not the key, which is why hibernate complains. WHy not choose a DropDownBox ? François > Le 4 févr. 2019 à 14:03, Zbynek Vavros a écrit : > > Do you mean to manually iterate through the map and converting the string > keys > Wicket binds to enum keys? Even if I try to iterate through the map I get > the same ClassCastException. > Somehow Wicket managed to insert String as a key instead of enum. > > Zbynek > > > > On Mon, Feb 4, 2019 at 1:55 PM Francois Meillet > wrote: > >> use MyEnum.valueOf("your string ») before saving the data >> >> François >> >> >> >>> Le 4 févr. 2019 à 13:51, Zbynek Vavros a écrit >> : >>> >>> I got this class that has map with enums as keys: >>> >>> public class MasterClass { >>> >>> private Map config = Maps.newHashMap(); >>> } >>> >>> enum is classic: >>> >>> public enum MyEnum { >>> VALUE1, >>> VALUE2 >>> } >>> >>> now I would like to use one entry of this map as a model for TextField: >>> >>> new RequiredTextField<>("componentId", new >>> PropertyModel<>(modelObject.getConfig(), "VALUE1"))) >>> >>> but when saved to DB Hibernate says the key is String and Enum is >> expected: >>> java.lang.ClassCastException: java.lang.String cannot be cast to >>> java.lang.Enum >>> >>> Using ChainingModel or >>> Model.of(modelObject.getConfig().get(MyEnum.VALUE1))) causes the value >> not >>> to be bind at all. >>> >>> I know I can use "side" property and fill this map manually in onSubmit >>> just before saving to DB but would like to avoid that. >>> >>> Thanks >> >> >> - >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >> For additional commands, e-mail: users-h...@wicket.apache.org >> >> - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: Model map with enum as a key
Do you mean to manually iterate through the map and converting the string keys Wicket binds to enum keys? Even if I try to iterate through the map I get the same ClassCastException. Somehow Wicket managed to insert String as a key instead of enum. Zbynek On Mon, Feb 4, 2019 at 1:55 PM Francois Meillet wrote: > use MyEnum.valueOf("your string ») before saving the data > > François > > > > > Le 4 févr. 2019 à 13:51, Zbynek Vavros a écrit > : > > > > I got this class that has map with enums as keys: > > > > public class MasterClass { > > > >private Map config = Maps.newHashMap(); > > } > > > > enum is classic: > > > > public enum MyEnum { > >VALUE1, > >VALUE2 > > } > > > > now I would like to use one entry of this map as a model for TextField: > > > > new RequiredTextField<>("componentId", new > > PropertyModel<>(modelObject.getConfig(), "VALUE1"))) > > > > but when saved to DB Hibernate says the key is String and Enum is > expected: > > java.lang.ClassCastException: java.lang.String cannot be cast to > > java.lang.Enum > > > > Using ChainingModel or > > Model.of(modelObject.getConfig().get(MyEnum.VALUE1))) causes the value > not > > to be bind at all. > > > > I know I can use "side" property and fill this map manually in onSubmit > > just before saving to DB but would like to avoid that. > > > > Thanks > > > - > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > >
Re: Model map with enum as a key
use MyEnum.valueOf("your string ») before saving the data François > Le 4 févr. 2019 à 13:51, Zbynek Vavros a écrit : > > I got this class that has map with enums as keys: > > public class MasterClass { > >private Map config = Maps.newHashMap(); > } > > enum is classic: > > public enum MyEnum { >VALUE1, >VALUE2 > } > > now I would like to use one entry of this map as a model for TextField: > > new RequiredTextField<>("componentId", new > PropertyModel<>(modelObject.getConfig(), "VALUE1"))) > > but when saved to DB Hibernate says the key is String and Enum is expected: > java.lang.ClassCastException: java.lang.String cannot be cast to > java.lang.Enum > > Using ChainingModel or > Model.of(modelObject.getConfig().get(MyEnum.VALUE1))) causes the value not > to be bind at all. > > I know I can use "side" property and fill this map manually in onSubmit > just before saving to DB but would like to avoid that. > > Thanks - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Model map with enum as a key
I got this class that has map with enums as keys: public class MasterClass { private Map config = Maps.newHashMap(); } enum is classic: public enum MyEnum { VALUE1, VALUE2 } now I would like to use one entry of this map as a model for TextField: new RequiredTextField<>("componentId", new PropertyModel<>(modelObject.getConfig(), "VALUE1"))) but when saved to DB Hibernate says the key is String and Enum is expected: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum Using ChainingModel or Model.of(modelObject.getConfig().get(MyEnum.VALUE1))) causes the value not to be bind at all. I know I can use "side" property and fill this map manually in onSubmit just before saving to DB but would like to avoid that. Thanks