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-titles-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: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org