Re: [Wicket-user] DropDownChoice binding question
ok, I see where you're going with this. very cool. My enum is in a helper class and I started writing conversion methods in the helper class. But I like the way you wrapped your conversion methods in a class to use on the Page class. I also gave some thought last night to using a MapInteger, String with the same conversion technique. Then my dropdown uses Integers and I can do a map.get() in getDisplayValue() for the String. Thanks for your help, Igor. igor.vaynberg wrote: you are passing a list of enum objects into the list model of the dropdown choice, that means the one selected object out of that list - of type enum - will be set into the model object. so there are two ways to do this you can pass in a list of ints into the choice component, that way the selected int will be set into your model or you can write a model decorator that does the transform class SizeEnumToIntModel extends Model { private final IModel delegate; public SizeEnumToIntModel(IModel delegate) { this.delegate=delegate; } public Object getObject(Component c) {return Size.forValue( delegate.getObject(c); // convert int to enum } public void setObject(Component c, Object o) { delegate.setObject(((Size)o).getintvalue(); // convert enum to int } public void detach() { delegate.detach(); } } then new DropDownChoice(id, new SizeEnumToIntModel(new PropertyModel(form, size)) you lose the nice compound model syntax, but oh well you might also be able to use a convert to accomplish the same, but i havent looked into that -igor -- View this message in context: http://www.nabble.com/DropDownChoice-binding-question-tf2900580.html#a8108551 Sent from the Wicket - User mailing list archive at Nabble.com. - Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV ___ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user
[Wicket-user] DropDownChoice binding question
Greetings, I am trying to take the value (only) of a DropDownChoice and put it in a model set on the Form. Ideally, I'd like to use a (java 5) enum, but any type of name value pair will work. For example, if I'm trying to set the size of a Shirt class, here is my Shirt, and a sample enum: public class Shirt { private int size; private int color; //. . . //(setters and getters removed to compact) } public static enum SIZE { Small(2), Medium(4), Large(6), private String id; SIZE(String id) { this.id = id; } public String getId() { return id; } public String getName() { return id + - + this.toString(); } } Now, in my Form, I set the shirt as a model. When I add my size DropDownChoice to the form, I am binding it to the size field of my Shirt class: private class InputForm extends Form { public InputForm(String name) { super(name, new CompoundPropertyModel(new Shirt())); DropDownChoice sizeChoice = new DropDownChoice(size, Arrays.asList(SIZE.values()), new ChoiceRenderer(name, id)); sizeChoice.setRequired(true); add(sizeChoice); //. . . } } When I submit this form, it fails because I get a Small, Medium, or Large object back. What I want is the id of the selected object. I looked at the examples in DropDownChoicePage.java in the compref package of the wicket examples and I could do that: create a list of Integers and use a switch or other technique to get the display value. What I really want to do is bind the id property of the enum to the Shirt.size property. I've done this in reverse with a PropertyModel, binding a property of the model to a field on the page. I having some trouble doing it this way. I read through a number of the posts on DropDownChoice as a search item. None seem to hit the nail on the head. One poster mentioned using ChoiceRenderer, but I'm not following how that would work. Any suggestions would be greatly appreciated! I'm using Wicket 1.2.3 and java 5 in Tomcat. -- View this message in context: http://www.nabble.com/DropDownChoice-binding-question-tf2900580.html#a8103832 Sent from the Wicket - User mailing list archive at Nabble.com. - Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV ___ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user
Re: [Wicket-user] DropDownChoice binding question
IChoiceRenderer allows you to specify the id and display values for a DropDownChoice. It's exactly what you're looking for. To explain a bit: getDisplayValue(...) - returns the value you want the user to see. Small, Medium, etc. This is where you'd return SIZE.getName(). getIdValue(...) returns the value submitted to the application. This is where you'd return SIZE.getId(). On 12/30/06, Flavius [EMAIL PROTECTED] wrote: Greetings, I am trying to take the value (only) of a DropDownChoice and put it in a model set on the Form. Ideally, I'd like to use a (java 5) enum, but any type of name value pair will work. For example, if I'm trying to set the size of a Shirt class, here is my Shirt, and a sample enum: public class Shirt { private int size; private int color; //. . . //(setters and getters removed to compact) } public static enum SIZE { Small(2), Medium(4), Large(6), private String id; SIZE(String id) { this.id = id; } public String getId() { return id; } public String getName() { return id + - + this.toString(); } } Now, in my Form, I set the shirt as a model. When I add my size DropDownChoice to the form, I am binding it to the size field of my Shirt class: private class InputForm extends Form { public InputForm(String name) { super(name, new CompoundPropertyModel(new Shirt())); DropDownChoice sizeChoice = new DropDownChoice(size, Arrays.asList(SIZE.values()), new ChoiceRenderer(name, id)); sizeChoice.setRequired(true); add(sizeChoice); //. . . } } When I submit this form, it fails because I get a Small, Medium, or Large object back. What I want is the id of the selected object. I looked at the examples in DropDownChoicePage.java in the compref package of the wicket examples and I could do that: create a list of Integers and use a switch or other technique to get the display value. What I really want to do is bind the id property of the enum to the Shirt.size property. I've done this in reverse with a PropertyModel, binding a property of the model to a field on the page. I having some trouble doing it this way. I read through a number of the posts on DropDownChoice as a search item. None seem to hit the nail on the head. One poster mentioned using ChoiceRenderer, but I'm not following how that would work. Any suggestions would be greatly appreciated! I'm using Wicket 1.2.3 and java 5 in Tomcat. -- View this message in context: http://www.nabble.com/DropDownChoice-binding-question-tf2900580.html#a8103832 Sent from the Wicket - User mailing list archive at Nabble.com. - Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV ___ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user - Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV___ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user
Re: [Wicket-user] DropDownChoice binding question
I tried this: DropDownChoice severityChoice = new DropDownChoice(size, Arrays.asList(SIZE.values()), new ChoiceRenderer() { public Object getDisplayValue(Object object) { return ((SIZE)object).getName(); } public String getIdValue(Object object, int index) { return ((SIZE)object).getId(); } }); The page renders fine. But when I submit the form, I get this error: WicketMessage: unable to set object Small, model: Model:classname=[wicket.model.CompoundPropertyModel] Root cause: wicket.util.convert.ConversionException: Cannot parse 'Small' using format [EMAIL PROTECTED] at wicket.util.convert.converters.AbstractConverter.newConversionException(AbstractConverter.java:72) As I understand it, it's trying to set an int in the Shirt model for size, but the drop down returned the Small object. What I really need is Small.getId(). So I need to tell the form to bind the id property of the return object to the field size Nick Heudecker wrote: IChoiceRenderer allows you to specify the id and display values for a DropDownChoice. It's exactly what you're looking for. To explain a bit: getDisplayValue(...) - returns the value you want the user to see. Small, Medium, etc. This is where you'd return SIZE.getName(). getIdValue(...) returns the value submitted to the application. This is where you'd return SIZE.getId(). -- View this message in context: http://www.nabble.com/DropDownChoice-binding-question-tf2900580.html#a8104039 Sent from the Wicket - User mailing list archive at Nabble.com. - Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV ___ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user
Re: [Wicket-user] DropDownChoice binding question
Can I see a bit more of your code? What you've posted looks good, so it's possible something else is causing the problem. You could try ##wicket on Freenode for more help. On 12/30/06, Flavius [EMAIL PROTECTED] wrote: I tried this: DropDownChoice severityChoice = new DropDownChoice(size, Arrays.asList(SIZE.values()), new ChoiceRenderer() { public Object getDisplayValue(Object object) { return ((SIZE)object).getName(); } public String getIdValue(Object object, int index) { return ((SIZE)object).getId(); } }); The page renders fine. But when I submit the form, I get this error: WicketMessage: unable to set object Small, model: Model:classname=[wicket.model.CompoundPropertyModel] Root cause: wicket.util.convert.ConversionException: Cannot parse 'Small' using format [EMAIL PROTECTED] at wicket.util.convert.converters.AbstractConverter.newConversionException( AbstractConverter.java:72) As I understand it, it's trying to set an int in the Shirt model for size, but the drop down returned the Small object. What I really need is Small.getId(). So I need to tell the form to bind the id property of the return object to the field size Nick Heudecker wrote: IChoiceRenderer allows you to specify the id and display values for a DropDownChoice. It's exactly what you're looking for. To explain a bit: getDisplayValue(...) - returns the value you want the user to see. Small, Medium, etc. This is where you'd return SIZE.getName(). getIdValue(...) returns the value submitted to the application. This is where you'd return SIZE.getId(). -- View this message in context: http://www.nabble.com/DropDownChoice-binding-question-tf2900580.html#a8104039 Sent from the Wicket - User mailing list archive at Nabble.com. - Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV ___ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user - Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV___ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user
Re: [Wicket-user] DropDownChoice binding question
you are passing a list of enum objects into the list model of the dropdown choice, that means the one selected object out of that list - of type enum - will be set into the model object. so there are two ways to do this you can pass in a list of ints into the choice component, that way the selected int will be set into your model or you can write a model decorator that does the transform class SizeEnumToIntModel extends Model { private final IModel delegate; public SizeEnumToIntModel(IModel delegate) { this.delegate=delegate; } public Object getObject(Component c) {return Size.forValue( delegate.getObject(c); // convert int to enum } public void setObject(Component c, Object o) { delegate.setObject(((Size)o).getintvalue(); // convert enum to int } public void detach() { delegate.detach(); } } then new DropDownChoice(id, new SizeEnumToIntModel(new PropertyModel(form, size)) you lose the nice compound model syntax, but oh well you might also be able to use a convert to accomplish the same, but i havent looked into that -igor On 12/30/06, Flavius [EMAIL PROTECTED] wrote: I tried this: DropDownChoice severityChoice = new DropDownChoice(size, Arrays.asList(SIZE.values()), new ChoiceRenderer() { public Object getDisplayValue(Object object) { return ((SIZE)object).getName(); } public String getIdValue(Object object, int index) { return ((SIZE)object).getId(); } }); The page renders fine. But when I submit the form, I get this error: WicketMessage: unable to set object Small, model: Model:classname=[wicket.model.CompoundPropertyModel] Root cause: wicket.util.convert.ConversionException: Cannot parse 'Small' using format [EMAIL PROTECTED] at wicket.util.convert.converters.AbstractConverter.newConversionException( AbstractConverter.java:72) As I understand it, it's trying to set an int in the Shirt model for size, but the drop down returned the Small object. What I really need is Small.getId(). So I need to tell the form to bind the id property of the return object to the field size Nick Heudecker wrote: IChoiceRenderer allows you to specify the id and display values for a DropDownChoice. It's exactly what you're looking for. To explain a bit: getDisplayValue(...) - returns the value you want the user to see. Small, Medium, etc. This is where you'd return SIZE.getName(). getIdValue(...) returns the value submitted to the application. This is where you'd return SIZE.getId(). -- View this message in context: http://www.nabble.com/DropDownChoice-binding-question-tf2900580.html#a8104039 Sent from the Wicket - User mailing list archive at Nabble.com. - Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV ___ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user - Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV___ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user
Re: [Wicket-user] DropDownChoice binding question
not sure what's wrong with your code, but i've done enum selection in voicetribe with code that looks like the following: add(new DropDownChoice(genre, new Model() { @Override public Object getObject(Component component) { return Genre.valuesSortedByLocalizedName(); } }, new IChoiceRenderer() { public Object getDisplayValue(Object object) { return ((Genre)object).getLocalizedName(); } public String getIdValue(Object object, int index) { return object.toString(); } })); Flavius wrote: I tried this: DropDownChoice severityChoice = new DropDownChoice(size, Arrays.asList(SIZE.values()), new ChoiceRenderer() { public Object getDisplayValue(Object object) { return ((SIZE)object).getName(); } public String getIdValue(Object object, int index) { return ((SIZE)object).getId(); } }); The page renders fine. But when I submit the form, I get this error: WicketMessage: unable to set object Small, model: Model:classname=[wicket.model.CompoundPropertyModel] Root cause: wicket.util.convert.ConversionException: Cannot parse 'Small' using format [EMAIL PROTECTED] at wicket.util.convert.converters.AbstractConverter.newConversionException(AbstractConverter.java:72) As I understand it, it's trying to set an int in the Shirt model for size, but the drop down returned the Small object. What I really need is Small.getId(). So I need to tell the form to bind the id property of the return object to the field size Nick Heudecker wrote: IChoiceRenderer allows you to specify the id and display values for a DropDownChoice. It's exactly what you're looking for. To explain a bit: getDisplayValue(...) - returns the value you want the user to see. Small, Medium, etc. This is where you'd return SIZE.getName(). getIdValue(...) returns the value submitted to the application. This is where you'd return SIZE.getId(). -- View this message in context: http://www.nabble.com/DropDownChoice-binding-question-tf2900580.html#a8104968 Sent from the Wicket - User mailing list archive at Nabble.com. - Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.phpp=sourceforgeCID=DEVDEV ___ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user