Your welcome! I will try to publish this snippet somewhere in the guide. > 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] >
--------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
