You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by MattyDE <uf...@gmail.com> on 2010/02/25 13:44:21 UTC
Re: DropDown where (type of model property) != (type of choices)
Great! Thanks a lot for this BeanDropDownChoice-Component ... iam a little
bit dissapointed that something similiar is not include inside the
standard-wicket framework....
One again: Great! :o)
elygre wrote:
>
>
> elygre wrote:
>>
>> It seems to me that it is a fairly hard requirement that the model and
>> the choice list have identical types. I'll investigate a bit further, to
>> see if I can build a generic mechanism for both a Map and a "bean"-style
>> object.
>>
>
> After looking deeper into this, I created two different specialized
> DropDownChoices, with different properties. The class signatures
> (interfaces) are as follows with complete code further below
>
> Now, of all the things I did in Wicket, this is the one thing that turned
> out to be furthest from expectations. It wasn't the hardest, but it was
> the easiest thing that turned out to be hard :-). If there is interest (or
> at least no objections...), I'll create a jira issue and submit this code
> for inclusion into 1.5.
>
> Class signatures:
>
> public class MapDropDownChoice<T> extends DropDownChoice<T> {
> public MapDropDownChoice(String id, Map<T, ?> choices);
> public MapDropDownChoice(String id, IModel<T> model, Map<T, ?>
> choices);
> }
>
> public class BeanDropDownChoice<T> extends MapDropDownChoice<T> {
> public BeanDropDownChoice(String id, List choices, IChoiceRenderer
> renderer);
> public BeanDropDownChoice(String id, IModel<T> model, List choices,
> IChoiceRenderer renderer);
> }
>
>
> Full code:
> public class MapDropDownChoice<T> extends DropDownChoice<T> {
>
> public MapDropDownChoice(String id, Map<T, ?> choices) {
> super(id, new ArrayList<T>(choices.keySet()), new
> MapChoiceRenderer(choices));
> }
>
> public MapDropDownChoice(String id, IModel<T> model, Map<T, ?>
> choices) {
> super(id, model, new ArrayList<T>(choices.keySet()), new
> MapChoiceRenderer(choices));
> }
>
> private static class MapChoiceRenderer extends ChoiceRenderer {
>
> private final Map map;
>
> public MapChoiceRenderer(Map map) {
> super("value", "key");
> this.map = map;
> }
>
> public Object getDisplayValue(Object object) {
> Object value = map.get(object);
> return value == null ? "" : value.toString();
> }
>
> public String getIdValue(Object object, int index) {
> return object == null ? "" : object.toString();
> }
> }
>
> }
>
> public class BeanDropDownChoice<T> extends MapDropDownChoice<T> {
>
> public BeanDropDownChoice(String id, List choices, IChoiceRenderer
> renderer) {
> super(id, createMap(choices, renderer));
> }
>
> public BeanDropDownChoice(String id, IModel<T> model, List choices,
> IChoiceRenderer renderer) {
> super(id, model, createMap(choices, renderer));
> }
>
> static Map createMap(Collection choices, IChoiceRenderer renderer) {
> Map map = new HashMap();
> for (Object choice : choices) {
> map.put(renderer.getIdValue(choice, -1),
> renderer.getDisplayValue(choice));
> }
> return map;
> }
> }
>
>
>
--
View this message in context: http://old.nabble.com/DropDown-where-%28type-of-model-property%29-%21%3D-%28type-of-choices%29-tp25052893p27714412.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
Re: DropDown where (type of model property) != (type of choices)
Posted by elygre <ei...@gmail.com>.
MattyDE wrote:
>
> Great! Thanks a lot for this BeanDropDownChoice-Component ... iam a little
> bit dissapointed that something similiar is not include inside the
> standard-wicket framework....
>
Thanks -- I'm glad to hear you enjoyed it :-)
If you want this to be part of Wicket itself, you may want to vote for
https://issues.apache.org/jira/browse/WICKET-2443.
--
View this message in context: http://old.nabble.com/DropDown-where-%28type-of-model-property%29-%21%3D-%28type-of-choices%29-tp25052893p27715910.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