我正在使用wicket 1.4并且我有两个ajax链接A和B.我想交替显示它们,我的意思是当我点击链接B时,可见性被设置为false(A消失)而反之亦然。我在链接的setVisibility()
方法上尝试使用OnClick()
,但它不起作用,也就是说,组件只会消失,仅在setVisible(false)
中onClick()
才会停用可见性:setVisible(true)
方法有效,而{{1}}没有。
你能救我吗??
答案 0 :(得分:2)
您可以实现它重新定义两个链接的isVisible方法。当单击一个链接时,您只需更改布尔变量并重新绘制链接。
这是一个草稿,但我几乎不记得类和方法名称:
// indicates which link is showed
boolean showA;
// I don't remember exactly the class name
AjaxLink linkA, linkB;
// For each link redefine onClick and isVisible
linkA = new AjaxLink() {
@Override boolean isVisible() { return showA; }
@Override void onClick(target) {
showA = false;
target.addComponent(linkA);
target.addComponent(linkB);
}
}
linkB = new AjaxLink() {
@Override boolean isVisible() { return !showA; }
@Override void onClick(target) {
showA = true;
target.addComponent(linkA);
target.addComponent(linkB);
}
}
答案 1 :(得分:2)
喜欢@polypiel的回答,但在onConfigure()
中设置可见性是最佳做法。
public class MyPanel extends Panel{
private boolean showLinkA = true;
AjaxLink aLink;
AjaxLink bLink;
public MyPanel(String id) {
super(id);
add(aLink = aLink());
add(bLink = bLink());
}
private AjaxLink aLink() {
AjaxLink al = new AjaxLink("aLink") {
@Override
protected void onConfigure() {
super.onConfigure();
setVisible(showLinkA);
}
@Override
public void onClick(AjaxRequestTarget target) {
showLinkA = false;
target.add(aLink, bLink);
}
};
al.setOutputMarkupPlaceholderTag(true);
return al;
}
private AjaxLink bLink() {
AjaxLink bl = new AjaxLink("aLink") {
@Override
protected void onConfigure() {
super.onConfigure();
setVisible(!showLinkA);
}
@Override
public void onClick(AjaxRequestTarget target) {
showLinkA = true;
target.add(aLink, bLink);
}
};
bl.setOutputMarkupPlaceholderTag(true);
return bl;
}
}
答案 2 :(得分:1)