我有两个容器,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));
}
}
}
答案 0 :(得分:2)
我发现了答案:当您使用AJAX时,不要在HTML中使用wicket:component。
始终使用真实的HTML元素。
基本上,我将<wicket:component wicket:id="myId" />
更改为<div wicket:id="myId" />
,一切正常。