Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

There is no "default" value. the The value selected in the dropdown will be the one that is set in the model that the drop down uses. so So when you submit, the selected object is pushed into the model, when dropdown renders the selected object is the one that is pulled from the model.

...

when this page renders, the letter B will be selected because it is the object inside the drop down's model.

-Igorunmigrated-wiki-markup

\[Taken from a wicket-user posting - [Gwyn|User__Gwynevans] 22:57, 9 Apr 2006 (BST)\]

...

Code Block
private DropDownChoice _phoneModelDDC;
   private MyModel _myModel = new MyModel();

   public MyPage(PageParameters parameters) {
        Form form = new Form("form", new CompoundPropertyModel(_myModel));
        add(form);

        addPhoneVendor(form);
        _phoneModelDDC = addPhoneModel(form);
    }

    private void addPhoneVendor(final Form form) {
        ArrayList phoneVendors = new ArrayList(getMySession().getTerminalVendors());
        form.add(new DropDownChoice("phoneVendor", phoneVendors) {
            /**
             * Whether this component's onSelectionChanged event handler should called using
             * javascript if the selection changes.
             *
             * @return True if this component's onSelectionChanged event handler should
             *         called using javascript if the selection changes
             */
            protected boolean wantOnSelectionChangedNotifications() {
                return true;
            }.add(new FormComponentUpdatingBehavior() {

            /**
             * Called when a option is selected of a dropdown list that wants to be
             * notified of this event.
             *
             * @param newSelection The newly selected object of the backing model
             */
            protected void onSelectionChangedonUpdate(final Object newSelection) {
                String phoneVendor = (String) newSelectiongetFormComponent().getModelObject();
                _myModel.setPhoneModel(null);   // Reset the phone model when the vendor changes
                phoneModelDDC.setChoices(getTerminalsByVendor(phoneVendor));
            }
        }));
    }

    private DropDownChoice addPhoneModel(Form form) {
        List list = Collections.EMPTY_LIST;
        String phoneVendor = _myModel.getPhoneVendor();
        if (phoneVendor != null) {
            list = getTerminalsByVendor(phoneVendor);
        }

        DropDownChoice phoneModelDDC = new DropDownChoice("phoneModel", list) {
            protected boolean wantOnSelectionChangedNotifications() {
                return true;
            }
        };
        form.add(phoneModelDDC);
        return phoneModelDDC;
    }

...

Code Block
private DropDownChoice _phoneVendorDDC, _phoneModelDDC;
   private MyModel _myModel = new MyModel();

   public MyPage(PageParameters parameters) {
        Form form = new Form("form", new CompoundPropertyModel(_myModel));
        add(form);

        _phoneVendorDDC = getPhoneVendorDDC(form);
        _phoneModelDDC = getPhoneModelDDC(form);

        form.add(_phoneVendorDDC);
        form.add(_phoneModelDDC);
    }

    private DropDownChoice getPhoneVendorDDC(final Form form) {
        ArrayList phoneVendors = new ArrayList(getMySession().getTerminalVendors());
        DropDownChoice phoneVendorDDC = new DropDownChoice("phoneVendor", phoneVendors);
        // Add Ajax Behaviour...
        phoneVendorDDC.add(new AjaxFormComponentUpdatingBehavior("onchange") {
            protected void onUpdate(AjaxRequestTarget target) {
                // Reset the phone model dropdown when the vendor changes
                _myModel.setPhoneModel(null);
                _phoneModelDDC.setChoices(getTerminalsByVendor(_myModel.getPhoneVendor()));
                target.addComponent(_phoneModelDDC);
            }
        });
        return phoneVendorDDC;
    }

    private DropDownChoice getPhoneModelDDC(Form form) {
        List list = Collections.EMPTY_LIST;
        String phoneVendor = _myModel.getPhoneVendor();
        if (phoneVendor != null) {
            list = getTerminalsByVendor(phoneVendor);
        }
        DropDownChoice phoneModelDDC = new DropDownChoice("phoneModel", list);
        phoneModelDDC.setOutputMarkupId(true);  // Needed for Ajax to update it
        return phoneModelDDC;
    }

...

If AJAX is used instead, the dropdown doesn't itself get reloaded, so the nullSelection string remains (and can still be selected.)

Another DropDownChoice Example by Adam

Donohoe Digital example - Good example of how to use DropDownChoice. Includes complete code for a key/value select choice and a select choice list that acts as IChoiceRenderer.

Binding Map example - Code sample binding a Map to DropDownChoice to persist an Integer using JPA.

[Cássio Landim post in wordpress 12:00, 5 Feb 2010 (BST)].