使用onClick()方法中的setVisible(),Ajax链接更改可见性

时间:2013-10-14 08:14:50

标签: java ajax wicket

我正在使用wicket 1.4并且我有两个ajax链接A和B.我想交替显示它们,我的意思是当我点击链接B时,可见性被设置为false(A消失)而反之亦然。我在链接的setVisibility()方法上尝试使用OnClick(),但它不起作用,也就是说,组件只会消失,仅在setVisible(false)onClick()才会停用可见性:setVisible(true)方法有效,而{{1}}没有。 你能救我吗??

3 个答案:

答案 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)

您可以尝试使用jQuery方法show()hide()。更多详情herehere