Return-Path: Delivered-To: apmail-wicket-users-archive@minotaur.apache.org Received: (qmail 91005 invoked from network); 10 Nov 2009 08:34:47 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 10 Nov 2009 08:34:47 -0000 Received: (qmail 87643 invoked by uid 500); 10 Nov 2009 08:34:46 -0000 Delivered-To: apmail-wicket-users-archive@wicket.apache.org Received: (qmail 87575 invoked by uid 500); 10 Nov 2009 08:34:46 -0000 Mailing-List: contact users-help@wicket.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: users@wicket.apache.org Delivered-To: mailing list users@wicket.apache.org Received: (qmail 87565 invoked by uid 99); 10 Nov 2009 08:34:46 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 10 Nov 2009 08:34:46 +0000 X-ASF-Spam-Status: No, hits=2.2 required=10.0 tests=HTML_MESSAGE,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of xavilope@gmail.com designates 74.125.78.147 as permitted sender) Received: from [74.125.78.147] (HELO ey-out-1920.google.com) (74.125.78.147) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 10 Nov 2009 08:34:34 +0000 Received: by ey-out-1920.google.com with SMTP id 26so103561eyw.2 for ; Tue, 10 Nov 2009 00:34:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type; bh=JS8SJqr08D5D9WJukiinyi5QIdOejOUTT7Wz31Yz/S8=; b=u4yxNsF1WqtFJ8gFPbotAds6++L0KDTzYb96r4HSsBZWhspWJhRbkTMHE7OP2IoKPj QdbqsG0D0vDkrhrr4pcjikHojT51H+JlqMFlmWK+i2nkYznEADmcxBbpsC3ZqjDihtHo n4ClXxwl2SaR3rrVL9WplSMFjD68QzZN25AKA= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=VY/OktpD46WMjLoev55+VVjRoPaAlWRoFFLDkkir9STVBFJCcaAIq8sCRtWQa0JkQ1 nL2OwgbJKHMMGOZxoSbdjTJCnKbfiFklnOK+19DeiBSfH+OeUlMbLQav82d6qaRdsSwG 08BRvIZMszyLuxK5oScwOItX+YI1I6zapEoNQ= MIME-Version: 1.0 Received: by 10.216.87.140 with SMTP id y12mr3066575wee.4.1257842053831; Tue, 10 Nov 2009 00:34:13 -0800 (PST) In-Reply-To: <20091109200507.85E5C816046@nike.apache.org> References: <128465050911090636g7da13cddwf3163185b4c8b4ad@mail.gmail.com> <20091109200507.85E5C816046@nike.apache.org> Date: Tue, 10 Nov 2009 09:34:13 +0100 Message-ID: <128465050911100034q4a6fece1j5e2cca65d5443f76@mail.gmail.com> Subject: Re: Combination CompoundPropertyModel and ChoiceRenderer on DropDownChoice gives problems From: =?ISO-8859-1?Q?Xavier_L=F3pez?= To: users@wicket.apache.org Content-Type: multipart/alternative; boundary=0016e6d5667acd60f90478002c28 X-Virus-Checked: Checked by ClamAV on apache.org --0016e6d5667acd60f90478002c28 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi Alex, Expose description and id on your model's object. > If I understand what you're saying, this was the problem, we did want the Component's Model to be i.e. a String, while giving the choices an id-descr-like bean... But this is not working (must have same object type o= n choices and component model), so the code above returns a List of Strings a= s choices, and uses a suitable choiceRenderer in order to retrieve descriptions from the 'description-enhanced' choice model, which consists o= f a Map ... public final static ChoiceRenderer listRenderer =3D new > ChoiceRenderer("description", "id"); > If i'm not wrong, this one will work when there is no Model object but when there is one, it will throw out an exception, complaining it doesn't find property 'id' nor 'description' in class String (which will be the class of the Component's Model object).. I don't know If i got your point though, Thanks! Xavier 2009/11/9 Alex Rass > I am a newb here, so I may be way off, but this works for me: > > public final static ChoiceRenderer listRenderer =3D 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=F3pez [mailto:xavilope@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 =3D new MappedModel(){ > public Object getObject() { > super.map =3D referenceData.getCountries(getLanguage()); > return new ArrayList(super.map.keySet()); > } > }; > DropDownChoice ddcCountry=3D 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=F3pez > > > 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 > > > > > >> 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 genders =3D new ArrayList(); > >> 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 =3D male > >> gender.F =3D female > >> > >> i18n for free. > >> > >> Sven > >> > >> > >> Xavier L=F3pez-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 havi= ng > >> > 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, i= n > >> 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, b= ut > >> > that > >> > will have no effect). But there is more to it, in order to achiev= e > >> > 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 tru= e. > I > >> > got it > >> > to work overriding 'getModelObject' and doing this search with th= e > >> > 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 > >> > > >> >> 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-ChoiceRendere= r-o > n-DropDownChoice-gives-problems-tp26262235p26266089.html > >> Sent from the Wicket - User mailing list archive at Nabble.com. > >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org > >> For additional commands, e-mail: users-help@wicket.apache.org > >> > >> > > > -- > "Klein bottle for rent--inquire within." > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org > For additional commands, e-mail: users-help@wicket.apache.org > > --0016e6d5667acd60f90478002c28--