DropDownChoice установить выбранный индекс - PullRequest
2 голосов
/ 02 мая 2011

У меня есть DropDownChoice:

       DropDownChoice timePeriod = new DropDownChoice("timePeriod", Arrays.asList(new TimePeriod(1, "Weekly"), new TimePeriod(2, "Bi-Weekly"), new TimePeriod(3, "Semi-Monthly"), new TimePeriod(4, "Monthly"), new TimePeriod(5, "Yearly")), new IChoiceRenderer() {

            private static final long serialVersionUID = 10102L;

            @Override
            public String getIdValue(Object object, int index) {
                return ((TimePeriod) object).getId() + "";
            }

            @Override
            public Object getDisplayValue(Object object) {
                return ((TimePeriod) object).getPeriodType();
            }
        });
        timePeriod.setNullValid(false);

Мой вопрос:

  1. Как установить выбранный индекс на 2 или любой другой?
  2. Как удалить первую пустую опцию по умолчанию?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 02 мая 2011

Вы должны иметь возможность установить выбранный индекс, используя PropertyModel вместо жесткого кодирования значений раскрывающегося списка. Я не могу проверить в данный момент, но это было бы что-то вроде

String timePeriodValue = "Bi-Weekly";

DropDownChoice timePeriod = new DropDownChoice("timePeriod",
  new PropertyModel(this, "timePeriodValue"),
  Arrays.asList(/* your options */),
  new IChoiceRenderer() {
    // ...
// Again, this is pseudocode only

В качестве бонуса, сам акт установки значения по умолчанию должен устранить проблему пустых опций.

1 голос
/ 02 мая 2011

DropDownChoice имеет конструктор, который принимает значение по умолчанию.Или в вашем коде вы можете добавить timePeriod.setModel (Model.of (new TimePeriod (2, "Bi-Weekly")))

Я думаю, TimePeriod имеет правильные реализации #equals () и #hashCode ().

О пустом параметре: см. Org.apache.wicket.markup.html.form.AbstractSingleSelectChoice.isNullValid ()

0 голосов
/ 02 мая 2011

Лорд Торгамус и Мартин-г, спасибо вам обоим.Я сделал небольшой тест.И это работает отлично.Как указал лорд Торгамус,

@SuppressWarnings({ "unchecked", "rawtypes", "serial" })
public class MyPage extends WebPage {

    public MyPage() {       
        add(new MyForm("form"));
    }

    private class MyForm extends Form {

        public MyForm(String id) {
            super(id);
            setOutputMarkupPlaceholderTag(true);
            setModel(new Model(new FormModel()));
            final DropDownChoice timePeriod = new DropDownChoice("timePeriod", new PropertyModel(getModel(), "timePeriod"), Arrays.asList(new TimePeriod(1, "Weekly"), new TimePeriod(2, "Bi-Weekly"), new TimePeriod(3, "Semi-Monthly"), new TimePeriod(4, "Monthly"), new TimePeriod(5, "Yearly")), new IChoiceRenderer() {

                private static final long serialVersionUID = 10102L;

                @Override
                public String getIdValue(Object object, int index) {
                    return ((TimePeriod) object).getId() + "";
                }

                @Override
                public Object getDisplayValue(Object object) {
                    return ((TimePeriod) object).getPeriodType();
                }
            });
            timePeriod.setNullValid(false);
            add(timePeriod);
            timePeriod.setOutputMarkupPlaceholderTag(true);
            timePeriod.add(new AjaxFormComponentUpdatingBehavior("onChange") {

                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                    MyForm form = (MyForm) timePeriod.getParent();
                    FormModel formModel = (FormModel) form.getModelObject();
                    formModel.setTimePeriod(new TimePeriod(4, "Monthly"));
                    form.setModel(new Model(formModel));
                    target.addComponent(form);
                }
            });
        }

        @Override
        public void onSubmit() {
            System.out.println(getModelObject());
        }

    }
    private class FormModel implements Serializable {
        private TimePeriod timePeriod = new TimePeriod(2, "Bi-Weekly");

        public FormModel() {

        }

        public TimePeriod getTimePeriod() {
            return timePeriod;
        }

        public void setTimePeriod(TimePeriod timePeriod) {
            this.timePeriod = timePeriod;
        }

        @Override
        public String toString() {
            return "FormModel [timePeriod=" + timePeriod + "]";
        }

    }

    private class TimePeriod implements Serializable {
        private int id;
        private String periodType;

        public TimePeriod(int id, String periodType) {
            super();
            this.id = id;
            this.periodType = periodType;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getPeriodType() {
            return periodType;
        }

        public void setPeriodType(String periodType) {
            this.periodType = periodType;
        }

        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + getOuterType().hashCode();
            result = prime * result + id;
            result = prime * result + ((periodType == null) ? 0 : periodType.hashCode());
            return result;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            TimePeriod other = (TimePeriod) obj;
            if (!getOuterType().equals(other.getOuterType()))
                return false;
            if (id != other.id)
                return false;
            if (periodType == null) {
                if (other.periodType != null)
                    return false;
            } else if (!periodType.equals(other.periodType))
                return false;
            return true;
        }

        private LoginPage getOuterType() {
            return LoginPage.this;
        }

        @Override
        public String toString() {
            return "TimePeriod [id=" + id + ", periodType=" + periodType + "]";
        }

    }
}

Приведенный выше код предназначен для других пользователей, поскольку он может быть полезен, и я написал его для целей тестирования, поэтому все классы написаны в одном файле .java, хотя это не рекомендуется.

Спасибо.

...