Wicket 导叶-面板未第二次更换

Wicket 导叶-面板未第二次更换,wicket,panel,Wicket,Panel,我有一个简单的模式弹出窗口,可以关闭一个按钮。在要显示modal的页面上有一个带有id的占位符。当页面首次加载时,我添加或替换一个空面板。然后,为了响应正确的操作,我将此面板与模式面板交换。然后我关闭面板,并再次与另一个空面板交换。一切正常。但奇怪的是,当我第二次这样做时,模态面板会正常打开,但当我按close时,即使它被新的空面板替换并添加到目标中,它也不会关闭,但它以前工作过!当我再次按下同一个按钮时,所有的东西都崩溃了,无法为模态找到标记的组件,但是应该不再有标记了 我已经想了一整天了,但

我有一个简单的模式弹出窗口,可以关闭一个按钮。在要显示modal的页面上有一个带有id的占位符。当页面首次加载时,我添加或替换一个空面板。然后,为了响应正确的操作,我将此面板与模式面板交换。然后我关闭面板,并再次与另一个空面板交换。一切正常。但奇怪的是,当我第二次这样做时,模态面板会正常打开,但当我按close时,即使它被新的空面板替换并添加到目标中,它也不会关闭,但它以前工作过!当我再次按下同一个按钮时,所有的东西都崩溃了,无法为模态找到标记的组件,但是应该不再有标记了

我已经想了一整天了,但我仍然没有找到这一切的原因。任何帮助都将不胜感激

private void swapToDummyPopupContainer() {
    currentPopupContainer = new DummyPanel("popupContainer");
    addOrReplace(currentPopupContainer);
}

private void swapToCreationPopupContainer(final FCalendarEvent event) {
    EventCreationPopup popup = new EventCreationPopup("popupContainer", event) {

        private static final long serialVersionUID = 965466080498078142L;

        @Override
        public void onDataSubmit(AjaxRequestTarget target) {
            AvailabilityDTO model = getModel();
            event.setTitle(model.getDescription());
            pushNewEventToModel(model);
            availabilityMapping.put(event.getId(), model);
            FCalendarEventActions.addEvent(target, fcalendar, event);
            swapToDummyPopupContainer();
            target.add(currentPopupContainer);
        }

        @Override
        public void onCancel(AjaxRequestTarget target) {
            swapToDummyPopupContainer();
            target.add(currentPopupContainer);
        }

    };
    currentPopupContainer = popup;
    addOrReplace(currentPopupContainer);
}

@Override
        protected void onRangeSelection(AjaxRequestTarget target, Date startDate, Date endDate,
                boolean isAllDay) {
            final FCalendarEvent event = new FCalendarEvent();
            swapToCreationPopupContainer(event);
            target.add(currentPopupContainer);
        }
至于标记,有

<wicket:container wicket:id="popupContainer" />
在父面板中,要交换的两个面板的定义如下

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<wicket:panel>

</wicket:panel>

</html>
在结束标记之前的模式标记的末尾有javascript,但我认为这与此无关:

<script type="text/javascript">
    var $modal = $('#eventCreationPopup');
    $modal.modal('setting', {
        selector : {
            close : '',
            approve : '',
            deny : ''
        }
    });
    $modal.modal("show");
</script>

不能将JavaScript事件附加到

<wicket:container wicket:id="popupContainer" />
因为wicket:container在由wicket生成的最终标记中没有真正的标记。setOutputMarkupPlaceholderTagtrue在这种情况下无效

将其更改为DIV标记:

<div wicket:id="popupContainer"></div>

请添加一些Java代码和标记。仅从描述来看,即使不是不可能,也很难找出发生了什么。请尝试在面板上调用setOutputMarkupPlaceholderTagtrue。我这样做了,但没有帮助。在那之前也设置了setOutputMarkupId。这听起来很有希望,但也没用。