Thanks Andrea,
I was trying what you sent in your previous message and I was having
trouble figuring out how to get the value set on the target property model.
Your code here, especially this line:
targetModel.setObject(getChoiceRenderer().getIdValue(newSelection,
choiceIndex));
was really helpful and I was able to get everything working.
Thanks again.
Have you ever consider making this available to the Wicket community? I see
a lot of questions related to DropDownChoice, but not many answers.
- Bruce
-----Original Message-----
From: Andrea Del Bene [mailto:[email protected]]
Sent: Wednesday, February 12, 2014 4:31 AM
To: [email protected]
Subject: Re: How to make a Wiket DropDownChoice with complex a model return
a simple String
Here is some code of a possible solution:
public class DropDownChoiceForString<T> extends DropDownChoice<T> {
private IModel<String> targetModel;
public DropDownChoiceForString(String id, IModel<T> model,
IModel<String> targetModel, List<? extends T> choices,
IChoiceRenderer<? super T> renderer) {
super(id, model, choices, renderer);
this.targetModel = targetModel;
}
protected DropDownChoiceForString(String id, IModel<T> model,
IModel<String> targetModel) {
this(id, model, targetModel, Collections.<T> emptyList(), null);
}
@Override
protected void onInitialize() {
super.onInitialize();
// load the initial choice.
setModelObject(convertChoiceIdToChoice(targetModel.getObject()));
}
@Override
protected void onDetach() {
super.onDetach();
targetModel.detach();
}
@Override
protected void onModelChanged() {
super.onModelChanged();
T newSelection = getModelObject();
int choiceIndex = getChoices().indexOf(newSelection);
// update the string source with the selected value.
targetModel.setObject(getChoiceRenderer().getIdValue(newSelection,
choiceIndex));
}
}
> Hi,
>
> I needed something similar in a couple of projects. One solution is to
> create a custom DropDownChoice which takes also the string model to
> update. Then you can override onModelChanged to update the string
> model with the new value that can be extracted with the ChoiceRenderer.
>> To make this easier to understand, let's say that I have a list of
>> state abbreviations for example AL, AK, AZ, AR etcetera (the actual
>> example has two letter abbreviations also, but much longer names). I
>> need a DropDownChoice that shows the abbreviations for selection
>> (e.g., AK) but will show the full name as a tooltip whenever the
>> mouse hovers over one of the choice (e.g., AK shows Alaska).
>>
>>
>> I have developed a solution that is based on the example presented here:
>> http://stackoverflow.com/questions/12234738/wicket-dropdownchoice-tit
>> les-too
>>
>> ltips-for-options
>>
>> that develops a subclass of DropDownChoice and overrides
>> appendOptionHtml to append a "title" to the buffer. My class takes a
>> StateDisplay object as its model, and the model has two fields, an
>> "id" that is displayed in the list, and a "fullName" which is added
>> as the title by the appendOptionHtml method.
>>
>>
>> This works fine for displaying thedropdown with the tooltip, but the
>> problem is that the model is a complex object( StateDisplay) with two
>> fields, but the underlying domain object needs a simple String with
>> the state ID.
>>
>>
>> Prior to implementing the tooltip, the DrowdownChoice was formed using:
>>
>>
>> Item.add(new DropDownChoice<String>("state", new
>> PropertyModel<String>((CompanyDTO) item.getDefaultModelObject(),
>> "state"), stateList)));
>>
>>
>> Note: "item "is there because this is used in the populateItem method
>> of a ListView.
>>
>>
>> Now the code is:
>>
>>
>> Model< StateDisplay > selectedState = new Model<>();
>>
>>
>> ChoiceRenderer<StateDisplay> choiceRenderer = new
>> ChoiceRenderer<ModifierDisplayDto>("id", "id");
>>
>>
>> Item.add(new StateDropDownChoice< StateDisplay >("state",
>> selectedState, stateList, choiceRenderer));
>>
>>
>> After the selection is made the model (selectedState) is set to the
>> chosen StateDisplay, but there is no easy way to the simple String
>> value set on the CompanyDTO.
>>
>>
>> How can I make the dropdown selection update the domain model's
>> simple String.
>>
>>
>> Thanks
>>
>> Bruce
>>
>>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]