Hi Ernesto, Sven,

Regarding the usage of localizeDisplayValues, I see that if I put simply "M"
or "F" it also works. Wonderful! Now I can define a general description for
"M" and "F", and provide specialized ones in case of need (thinking about
yes/no literals). But, could I someway define 'groups' of yes/no
descriptions (i.e. yes/no, positive/negative) and tell someway the component
to look for one or antoher having only the "Y", "N" literals? (maybe out of
scope on this question)


Why not use IChoiceRenderer?
>

I suppose you mean anonimously subclassing ChoiceRenderer and overriding
getDisplayValue in order to get the proper description... Something like
what Pedro proposed here maybe?
http://mail-archives.apache.org/mod_mbox/wicket-users/200911.mbox/%3c341aa5500911040801j3f2cb9e0tc1109314522d5...@mail.gmail.com%3e

That could be good, although maybe pulling out the description for each
choice could penalize performance...

Igor also proposed a solution to another problem that might come in handy in
http://www.mail-archive.com/wicket-u...@lists.sourceforge.net/msg26881.html

I'd like to do something like this:

// Localized choices
final Model countryModel = new Model(){
    public Object getObject() {
        return referenceData.getCountries(getLanguage());
    }
};
DropDownChoice ddcCountry = new DropDownChoice("country",countryModel);
ddcCountry.setChoiceRenderer(new IChoiceRenderer() {
               public Object getDisplayValue(Object object) {
                   return ((Map)countryModel.getObject()).get(object);
               }
               public String getIdValue(Object object, int index) {
                   return object.toString();
               }
};

Only that countryModel's getObject should return a List instead of a Map
(and I'd like the model to be dynamic)

Thanks a lot!
Xavier


2009/11/9 Ernesto Reinaldo Barreiro <reier...@gmail.com>

> Why not use IChoiceRenderer?
>
> Ernesto
>
> On Mon, Nov 9, 2009 at 2:27 PM, Xavier López <xavil...@gmail.com> wrote:
>
> > 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-on-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
> > >
> > >
> >
>

Reply via email to