I'm using a wizard with a CompoundPropertyModel of some object called
Device.
The Device object has a distributor and company properties (and some other
too...)

In the first step of the wizard, the user has to choose a distributor or
company(both allowed too) for this device.

For the device's distributer selection I have a DropDownChoice that uses a
PropertyModel.
I've also setNullValid to true and provided a properties key for the null
value.

The problem is that after I choose a distributor, go to the next step, and
then return, the distributor I chose before is not automaticaly chosen in
the DDC, instead the
first value in the choices list is chosen (null value in this case).

I've overridden afterRender and onModelChange for debug purposes.
I've added a simple console print that prints out the Device.distributor
value and the DDC defultObjectModel value.

>From these prints, I've gathered that after pressing previous, the DDC holds
the correct chosen value for distributor but it doesnt display it.

some more info:
The DDC is in an inner form along with a custom panel for choosing a
company.
I didn't define a model for this form.
I use this form to hold both the distributor and company selection so that i
can validate that either (or both) was chosen.

some relevant code:

the wizard class has
    private Device deviceCreation;

and in its constructor
        setDefaultModel(new CompoundPropertyModel<Device>(deviceCreation));

the inner InfoStep class (the first step in the wizard):

private final class InfoStep extends WizardStep {

public InfoStep() {

            add(new DropDownChoice("devicesType",
Arrays.asList(DeviceType.values())));      <<<< this is another DDC for
another property that does work properly!!

            final DropDownChoice<Distributor> distribChoice =
                    new DropDownChoice<Distributor>("distributor",

new PropertyModel<Distributor>(devicesCreation, "distributor"),

new DistributorModel(distributorDao)) {
                @Override
                protected boolean wantOnSelectionChangedNotifications() {
                    return true;
                }
            };

            distribChoice.setNullValid(true);

            final CompanyChooser compChoose = new CompanyChooser("company");

            Form form = new Form("distribOrCompanyForm") {

                // perform custom validation
                // check that either a distributer or a company was chosen
(or
                // both)
                @Override
                protected void onValidate() {
                    super.onValidate();
                    if (distribChoice.getModelObject() == null  &&
!compChoose.isValid()) {
                        this.error("distributer or company selection is
required");
                    }
                }

            };
            add(form);
            form.add(distribChoice);
            form.add(compChoose);
        }
    }

Reply via email to