Как я могу скрыть значок DatePicker, когда его DateTextField скрыт? - PullRequest
0 голосов
/ 29 июля 2011

Я использую DatePicker (org.apache.wicket.extensions.yui.calendar.DatePicker - Javadoc ) в форме. Форма состоит из двух полей. Первое поле является раскрывающимся, а второе изменяется динамически в зависимости от первого. Если выбран «текст», появится текстовое поле; если выбран «список», появляется выпадающее меню; и если выбрано «дата», появится окно выбора даты и связанное с ним поле.

Вот упрощенная версия моего текущего кода:

DateTextField dateField = new DateTextField("dateField", // ...
DatePicker datePicker = new DatePicker();
dateField.add(datePicker);

fieldOne.add(new OnChangeAjaxBehavior() {
    protected void onUpdate(AjaxRequestTarget target) {
        if (fieldOne.equalsIgnoreCase("list"))
        {
            dateField.setVisible(false);
            // datePicker.setVisible(false); // This line is impossible
            listField.setVisible(true);
            textField.setVisible(false);
        }
        else if { /* similar visibility settings for dates and text */ }
    }
});

Форма в настоящее время работает правильно для изменения на указатель даты. Проблема возникает, когда выбирается дата, а затем пользователь выбирает что-то еще. Поле даты исчезнет, ​​но на экране останется указатель даты . К сожалению, похоже, что у него нет метода setVisible() или его эквивалента. На самом деле, это даже не настоящая калитка Component.

Как я могу заставить их появляться / исчезать вместе? Если я не могу установить видимость сборщика напрямую, могу ли я как-то связать его с видимостью поля?

Ответы [ 2 ]

1 голос
/ 29 июля 2011

На сегодняшний день самое простое, но все же достаточно удобное решение - сгруппировать компоненты, которые вы хотите скрыть вместе, в WebMarkupContainer. В разметке вы, вероятно, захотите использовать элемент <div> для контейнера, но это зависит от того, что вы хотите скрыть. (Иногда сама разметка мешает вам использовать этот метод, но будем надеяться, что ваша разметка не будет. :))

Тогда просто измените видимость контейнера.

0 голосов
/ 03 августа 2011

Хорошая идея с AjaxListeners также состоит в том, чтобы вызвать .setOutputMarkupId(true) для компонента, который вы хотите обработать.В противном случае вы, возможно, не сможете "найти" его.

Если вы не рендерите его при загрузке, но намереваетесь добавить компонент позже, я думаю, вам также следует вызвать setOutputMarkupPlaceholderTag(true).

Это помогло мне несколько раз ...

...