Java Wicket AjaxFallbackLink, требующий двойного щелчка после того, как становится видимым - PullRequest
1 голос
/ 16 августа 2011

У меня есть два контейнера, ДО и ПОСЛЕ. Когда страница загружается, ПЕРЕД видим, а ПОСЛЕ нет.

ПЕРЕД содержит AjaxFallbackLink, который перерисовывает ДО и ПОСЛЕ, но делает ПЕРЕД невидимым и ПОСЛЕ видимым, то есть триггером видимости.

У меня также есть AjaxFallbackLink внутри ПОСЛЕ, который делает обратное: перерисовывает ДО и ПОСЛЕ, но делает ДО ДО видимым, а ПОСЛЕ невидимым.

Проблема: для ссылки внутри ПОСЛЕ требуется два щелчка, чтобы панели перерисовывались, когда мне нужен только один. Я установил для setOutputMarkupPlaceholderTag значение true для каждого компонента, который я могу найти, но все же мне нужно два щелчка по ссылке ПОСЛЕ, чтобы панели перерисовывались.

Есть ли способ решить эту проблему?

Вот некоторый (упрощенный) код:

private class ViewDatesFragment extends Fragment<Campaign> {
    private ViewDatesFragment(final MarkupContainer markupProvider) {
        super("flightNoDates", "viewDatesFragment", markupProvider);
        add(new AddDatesLink());
        setOutputMarkupPlaceholderTag(true);
    }

    private class AddDatesLink extends AjaxFallbackLink<Campaign> {

        private AddDatesLink() {
            super("addDates");

            add(new Label("startDate", "This is the start date").setOutputMarkupPlaceholderTag(true));
        setOutputMarkupPlaceholderTag(true);
        }

        @Override
        public void onClick(final AjaxRequestTarget target) {
            target.addComponent(viewDatesContainer.setVisible(false));
            target.addComponent(editDatesContainer.setVisible(true));            
    }
    }
}

private class EditDatesFragment extends Fragment<Campaign> {

    private EditDatesFragment(final MarkupContainer markupProvider) {
        super("flightDates", "editDatesFragment", markupProvider);

        add(new CancelDatesLink().setOutputMarkupPlaceholderTag(true));
        setOutputMarkupPlaceholderTag(true);
    }

    private class CancelDatesLink extends AjaxFallbackLink {
        private CancelDatesLink() {
            super("cancelDates");
            add(new Label("cancelDatesText", "cancel").setOutputMarkupPlaceholderTag(true));
            setOutputMarkupPlaceholderTag(true);
        }

        @Override
        public void onClick(final AjaxRequestTarget target) {
            target.addComponent(viewDatesContainer.setVisible(true));
            target.addComponent(editDatesContainer.setVisible(false));
        }
    }
}

1 Ответ

2 голосов
/ 16 августа 2011

Я обнаружил ответ: никогда не используйте компонент wicket:* до <div wicket:id="myId" /> и все работало нормально.

...