I am a newb here, so I may be way off, but this works for me: public final static ChoiceRenderer listRenderer = new ChoiceRenderer("description", "id");
Expose description and id on your model's object. And just add the listRenderer to the DDChoice (last param). Seems a lot simpler than what you are doing. -----Original Message----- From: Xavier López [mailto:xavil...@gmail.com] Sent: Monday, November 09, 2009 9:37 AM To: users@wicket.apache.org Subject: Re: Combination CompoundPropertyModel and ChoiceRenderer on DropDownChoice gives problems Got it! Here is the code i got into. Improvements and critics are welcome ! class MappedModel extends Model { protected Map map; public String getDescription(Object id){ return (String) map.get(id); } } // Localized choices final MappedModel countryModel = new MappedModel(){ public Object getObject() { super.map = referenceData.getCountries(getLanguage()); return new ArrayList(super.map.keySet()); } }; DropDownChoice ddcCountry= new DropDownChoice("country",countryModel); ddcCountry.setChoiceRenderer(new IChoiceRenderer() { public Object getDisplayValue(Object object) { return countryModel.getDescription(object); } public String getIdValue(Object object, int index) { return object.toString(); } }); Thanks to everyone on this list not only for the heads up on this one but for many more I did not need to ask ;) 2009/11/9 Xavier López <xavil...@gmail.com> > Hi Sven, > > Absolutely awesome. So sweet how problems vanish away when you know the > right way to address them on Wicket: ). > > But, what if I had a list of countries in the database (better example than > gender in this case), with its descriptions in it? Should I store a Country > entity in my bean, instead of simply and Id (taking into account this entity > possibly contains the descriptions and other unuseful stuff) ? Could I > manage someway, using the countryId's in the ddc's choiceList model, to look > for those descriptions in i.e. a memory-stored Map ? > > Thanks a lot! > Xavier > > 2009/11/9 svenmeier <s...@meiers.net> > > >> You want to select one value from a list of values, so obviously >> everything >> has to have the same type. >> >> These 'IdDescrBeans' smell like Struts, such constructs are not needed. >> What's wrong with the following: >> >> List<String> genders = new ArrayList<String>(); >> list.add("M"); >> list.add("F"); >> form.add(new DropDownChoice("gender", genders) { >> protected boolean localizeDisplayValues() { >> return true; >> } >> }); >> >> Creating an enum would be a nice alternative to strings though. >> Put the following keys in you page's property file: >> >> gender.M = male >> gender.F = female >> >> i18n for free. >> >> Sven >> >> >> Xavier López-2 wrote: >> > >> > Hi Ann, >> > >> > I've also encountered this problem, but with RadioChoice instead of >> > DropDownChoice. >> > >> > This is the thread I started about it: >> > >> > >> http://mail-archives.apache.org/mod_mbox/wicket-users/200911.mbox/browser >> > >> > After all this thread, I still don't know what should I do to model, for >> > instance, a gender radioChoice which would be backed by a String >> property >> > ("M" of "F"), providing a list of choices (multilingual) with >> IdDescrBeans >> > like you propose. >> > Should I change my bean's 'String gender' property to 'IdDescrBean >> gender' >> > ? >> > Why should I store description's information on my model entity ? >> > >> > Although I agree with having same object's on choices and model when >> it's >> > about more complex data... >> > >> > Possible solutions I've thought of so far: >> > >> > - Ideally, do not use different object types in >> compundpropertymodel's >> > bean and choice List. Use same object type instead. >> > - When using RadioChoice, it works if you substitute it with a >> > RadioGroup >> > and Radio's, using the 'id' property as the Radio's model and the >> > 'description' property as the label's model. However, when it's about >> > DropDownChoice, I'm clueless about it at the moment (already having >> > problems >> > with them). >> > - Provide a list of choices in which each element is an Id, and then >> > provide a ChoiceRenderer display expression such that gets the proper >> > description (I don't like that at all). >> > - Modify IdDescrBean so that it returns the 'id' property in its >> > 'toString' method, and, assuming the compundpropertymodel's bean >> > related >> > property is String, provide an implementation for some useless method >> > ('trim' for example), so that it returns the desctiption. Then, in >> the >> > ChoiceRenderer, you can set the displayExpression to 'trim()', which >> > will >> > ensure that when the component model's object is a String, this error >> > will >> > not happen (also, it will return the trimmed id as description, but >> > that >> > will have no effect). But there is more to it, in order to achieve >> > AbstractSingleSelectChoice's getModelValue() to identify the selected >> > choice >> > element, it calls 'indexOf' on the Choice List, using the >> > compundpropertymodel's bean related property value. That is, it >> > searches in >> > a List of IdDescrBean a String. Problem is 'indexOf' invokes >> > 'searchedElement.equals(choices[i])', which will never return true. I >> > got it >> > to work overriding 'getModelObject' and doing this search with the >> > opposite >> > comparation (choices[i].equals(searchedElement), and providing a >> > suitable >> > implementation of 'equals' in the IdDescrBean class... But that's >> > extremely >> > hacky and ugly, and... it would not work for ListMultipleChoice, as >> > getModelValue is final... >> > >> > >> > >> > 2009/11/9 Ann Baert <ann.ba...@tvh.be> >> > >> >> I've created a jira issue with more information and an example for this >> >> problem: >> >> https://issues.apache.org/jira/browse/WICKET-2565 >> >> **** DISCLAIMER **** >> >> >> >> http://www.tvh.com/newen2/emaildisclaimer/default.html >> >> >> >> "This message is delivered to all addressees subject to the conditions >> >> set forth in the attached disclaimer, which is an integral part of this >> >> message." >> >> >> > >> > >> > >> > -- >> > "To err is human; to make real mess, you need a computer." >> > >> > >> >> -- >> View this message in context: >> http://old.nabble.com/Combination-CompoundPropertyModel-and-ChoiceRenderer-o n-DropDownChoice-gives-problems-tp26262235p26266089.html >> Sent from the Wicket - User mailing list archive at Nabble.com. >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >> For additional commands, e-mail: users-h...@wicket.apache.org >> >> -- "Klein bottle for rent--inquire within." --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org