this should give you an idea http://wicketinaction.com/2008/09/building-a-smart-entitymodel/
-igor On Tue, Oct 28, 2008 at 12:27 PM, Gianni Doe <[EMAIL PROTECTED]> wrote: > I'm starting out with Wicket and following the Wicket In Action examples > through and I'm a bit stuck on how to make use of a LoadableDetachableModel > in a drop-down menu situation. > > I've got a drop-down menu of countries which is populated from a > LoadableDetachableModel, this works perfectly but my selected Country is > then stored in the page as a complete object, I'd like to be able to make > use of LoadableDetachableModel also for the selectedCountry but I'm not > clear on where and how I should instantiate it. > i.e. for the example below where do I put the "new > LoadableRefDataModel<Country>(selectedCountry);". > > I'd appreciate some suggestions, I think I'm getting the hang of the Model > idea but can't see the wood for the trees at the moment. > > > > public class LocationSearchPage extends WebPage { > > private DropDownChoice<Country> countryChoice; > > private DropDownChoice<Location> locationChoice; > > private Country selectedCountry; > > private List<Location> locations = new ArrayList<Location>(); > > private Location selectedLocation; > > @SpringBean > private RefDataService refDataService; > > public LocationSearchPage() { > > Form searchForm = new Form("searchForm") { > @Override > protected void onSubmit() { > //... > } > }; > add(searchForm); > > ChoiceRenderer countryRenderer = new ChoiceRenderer("description", > "id"); > IModel<List<? extends Country>> countryModel = new > LoadableDetachableModel<List<? extends Country>>() { > @Override > protected List<Country> load() { > return refDataService.getCountries(); > } > }; > > countryChoice = new DropDownChoice<Country>( > "country", selectedCountry, countryModel, countryRenderer); > > countryChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") { > protected void onUpdate(AjaxRequestTarget target) { > this.selectedLocation = null; > locationChoice.setChoices(new > ArrayList<Country>(selectedCountry.getLocations())); > target.addComponent(locationChoice); > } > }); > > ChoiceRenderer locationRenderer = new ChoiceRenderer("description", > "id"); > locationChoice = new DropDownChoice<Location>( > "location", new PropertyModel<Location>(this, > "selectedLocation"), locations, locationRenderer); > } > } > > > public class LoadableRefDataModel<T extends RefData> extends > LoadableDetachableModel { > > @SpringBean > private RefDataService refDataService; > > private Class<T> type; > > private Serializable id; > > public LoadableRefDataModel(Class<T> type, Serializable id) { > InjectorHolder.getInjector().inject(this); > this.type = type; > this.id = id; > } > > public LoadableRefDataModel(T domainObject) { > super(domainObject); > InjectorHolder.getInjector().inject(this); > this.type = (Class<T>) domainObject.getClass(); > this.id = domainObject.getCode(); > } > > @Override > protected T load() { > return refDataService.load(type, id); > } > } > > > --------------------------------------------------------------------- > 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]