Java Wicket AjaxFallbackLink在变为可见后需要双击

时间:2011-08-15 23:25:13

标签: java wicket

我有两个容器,BEFORE和AFTER。当页面加载时,BEFORE可见,而AFTER则不可见。

BEFORE包含一个AjofFallbackLink,它可以在BEFORE和AFTER之前重绘,但使BEFORE不可见并且在可见之后,即可见性触发器。

我在AFTER中也有一个AjaxFallbackLink可以反过来:BEFORE和AFTER之前重绘但是BEFORE可见并且AFTER不可见。

问题:当我只需要一个时,AFTER里面的链接需要两次点击让面板重绘。我已经在我能找到的每个组件上将setOutputMarkupPlaceholderTag设置为true,但我仍然需要在AFTER链接上单击两次才能重新绘制面板。

有没有办法解决这个问题?

这是一些(简化的)代码:

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 个答案:

答案 0 :(得分:2)

我发现了答案:当您使用AJAX时,不要在HTML中使用wicket:component。

始终使用真实的HTML元素。

基本上,我将<wicket:component wicket:id="myId" />更改为<div wicket:id="myId" />,一切正常。