does this work without wickettester? -igor
On Mon, Oct 6, 2008 at 2:24 PM, dukehoops <[EMAIL PROTECTED]> wrote: > > Sure, here it is below. Test selects a non-default value from > 'publicLocationChoices' drop down. Problems are: > -on form submit, LocationSelectionPanel.convertInput() is not called (have > breakpoint there) > -in debugger, I can see dropDown's rawInput changing on form submit, but > model's object ('data') value is never updated > > Test > public void testLocationSelectionPanel_SelectCohost() { > final WicketTester t = getTester(); > final VirtualEventFormBean formBean = new VirtualEventFormBean(); > formBean.setEventId(EVENT_ID); > formBean.setOrganizerId(currentUser.getId()); > final EventLocation initialLocation = > virtualEventService.getCustomSpaceEventLocation(currentUser.getId()); > formBean.setLocation(initialLocation); > > LocationSelectionPanelTestPage p = new > LocationSelectionPanelTestPage(formBean); > t.startPage(p); > t.assertRenderedPage(LocationSelectionPanelTestPage.class); > > DropDownChoice publicLocationsChoice = (DropDownChoice) > t.getComponentFromLastRenderedPage("form:location:publicLocationChoices"); > //selecting component > > FormTester ft = t.newFormTester("form"); > > //select cohost > ft.select("location:publicLocationChoices", 1); //select 1st public > location > > //submit > ft.submit(); > EventLocation newLocation = p.getFormBean().getLocation(); > assertNotSame(initialLocation, newLocation); > assertTrue(newLocation instanceof PublicEventLocation); > } > > Test Page > public class LocationSelectionPanelTestPage extends AbstractWebPage { > > @SpringBean private VirtualEventService virtualEventService; > > private final VirtualEventFormBean formBean; > private CompoundPropertyModel model; > > public LocationSelectionPanelTestPage(VirtualEventFormBean formBean) { > assert formBean != null; > this.formBean = formBean; > model = new CompoundPropertyModel(formBean); > Form form = new Form("form", model); > add(form); > > //location selection > final CustomSpaceEventLocation organizerLocation = > virtualEventService.getCustomSpaceEventLocation(formBean.getOrganizerId()); > //assemble cohost models > List<CustomSpaceEventLocation> cohostLocations = new > ArrayList<CustomSpaceEventLocation>(); > for (Serializable cohostId : formBean.getCohosts()) { > CustomSpaceEventLocation cohostLocation = > virtualEventService.getCustomSpaceEventLocation(cohostId); > cohostLocations.add(cohostLocation); > } > > LocationSelectionPanel locationSelectionPanel = new > LocationSelectionPanel( > "location", > organizerLocation, > cohostLocations, > virtualEventService.getPublicEventLocations(), > formBean); > > form.add(locationSelectionPanel); > } > > public VirtualEventFormBean getFormBean() { > return formBean; > } > } > > Custom Component In Question > public class LocationSelectionPanel extends FormComponentPanel { > > //final private PublicLocationRadio publicLocationRadio; > final private RadioGroup locationGroup; > final private PublicLocationDropDownChoice publicLocationDropDown; > final private VirtualEventFormBean formBean; > //final private BoundCompoundPropertyModel model; > //final static String LOCATION_PROPERTY = "location"; > final private Model publicLocationModel = new Model(); > final private Model locationGroupModel = new Model(); > final private CustomSpaceEventLocation organizerLocation; > > public LocationSelectionPanel( > String wicketId, > CustomSpaceEventLocation organizerLocation, > List<CustomSpaceEventLocation> cohostLocations, > List<PublicEventLocation> publicLocations, > VirtualEventFormBean formBean) { > > super(wicketId); > assert organizerLocation != null; > assert cohostLocations != null; > assert publicLocations != null; > assert formBean != null; > > this.formBean = formBean; > this.organizerLocation = organizerLocation; > > this.setRequired(true); > > //model = new BoundCompoundPropertyModel(formBean); > this.setModel(new Model(formBean.getLocation())); > //model.bind(this, LOCATION_PROPERTY); > > > //group will default to location specified in formBean.location > locationGroup = new RadioGroup("locationGroup", locationGroupModel); > locationGroup.setRequired(true); > add(locationGroup); //bind RadioGroup's model object to location > property of this.model's formBean > > // organizer's apt > CustomSpaceRadio organizerRadio = new > CustomSpaceRadio("organizerLocation", organizerLocation); > locationGroup.add(organizerRadio); > > //co-hosts' places > //create radio controls for cohosts' locations > ListView participantChoices = new > CohostLocationListView("cohostLocationChoices", cohostLocations); > locationGroup.add(participantChoices); > > //drop down for public locations > publicLocationDropDown = new > PublicLocationDropDownChoice("publicLocationChoices", publicLocations); > add(publicLocationDropDown); > > // radio for selecting public location > PublicLocationRadio publicLocationRadio = new > PublicLocationRadio("publicLocation"); > locationGroup.add(publicLocationRadio); > } > > @Override > protected void onBeforeRender() { > > //set child model's based on location property > final Object modelObject = getModelObject(); > > EventLocation location = (EventLocation) modelObject; > assert location != null; > > if (location instanceof CustomSpaceEventLocation) { > locationGroupModel.setObject(location); > publicLocationModel.setObject(null); > } else if (location instanceof PublicEventLocation) { > publicLocationModel.setObject(location); > locationGroupModel.setObject(location); > } else { > throw new IllegalStateException("location property of unknown > type: " + location); > } > > //enable drop-down only if public location radio is selected > //publicLocationDropDown.setEnabled(location instanceof > PublicEventLocation); > > //render children > super.onBeforeRender(); > } > > > > > /** > * check whether publicLocationRadio is selected. if so, > setConvertedInput > * to publicLocationDropDown's model object, else to radioGroup's > */ > @Override > protected void convertInput() { > > Object convertedInput = null; > > EventLocation locGroupModelObject = (EventLocation) > locationGroup.getConvertedInput(); > assert locGroupModelObject != null; > > if (locGroupModelObject instanceof CustomSpaceEventLocation) { > //TODO always true because locationGroup's model is never null > convertedInput = locationGroup.getConvertedInput(); > } else { > convertedInput = > publicLocationDropDown.getConvertedInput();//publicLocationModel.getObject(); > } > > setConvertedInput(convertedInput); > } > > private class PublicLocationDropDownChoice extends DropDownChoice { > > public PublicLocationDropDownChoice(String wicketId, > List<PublicEventLocation> publicLocations) { > super(wicketId, publicLocationModel, publicLocations, new > PublicEventLocationChoiceRenderer()); > } > } > > private class PublicLocationRadio extends Radio { > > public PublicLocationRadio(String wicketId) { > super(wicketId); > setModel(publicLocationModel); > } > } > > private class PublicEventLocationChoiceRenderer implements > IChoiceRenderer { > > public Object getDisplayValue(Object object) { > if (object instanceof PublicEventLocation) { > return ((PublicEventLocation) object).getName(); > } > return null; > } > > public String getIdValue(Object object, int index) { > return String.valueOf(index); > } > } > > private class CohostLocationListView extends ListView { > > public CohostLocationListView(String wicketId, > List<CustomSpaceEventLocation> cohostLocations) { > super(wicketId, cohostLocations); > } > > protected void populateItem(ListItem item) { > item.add(new CustomSpaceRadio("cohostLocation", > (CustomSpaceEventLocation) item.getModelObject())); > } > } > } > > > > ----- > ---------------- > Nikita Tovstoles > vside.com > ---------------- > > -- > View this message in context: > http://www.nabble.com/Custom-Radio-component-with-children--tp19804341p19846733.html > Sent from the Wicket - User mailing list archive at Nabble.com. > > > --------------------------------------------------------------------- > 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]