Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Ajax链接使用onClick()方法中的setVisible()更改可见性_Java_Ajax_Wicket - Fatal编程技术网

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

Java Ajax链接使用onClick()方法中的setVisible()更改可见性,java,ajax,wicket,Java,Ajax,Wicket,我正在使用wicket 1.4,我有两个ajax链接A和B。我想交替显示它们,我的意思是,当我单击链接B时,可见性设置为false(A消失),反之亦然。我在链接的OnClick()方法上尝试了setVisibility(),但它不起作用,也就是说,一个组件只会消失,可见性只会被停用,从未激活:setVisible(false)在OnClick()方法中起作用,而setVisible(true)不起作用。 你能帮我吗?你可以试试jQuery方法show()和hide()。更多详细信息和。您可以尝试

我正在使用wicket 1.4,我有两个ajax链接A和B。我想交替显示它们,我的意思是,当我单击链接B时,可见性设置为false(A消失),反之亦然。我在链接的
OnClick()
方法上尝试了
setVisibility()
,但它不起作用,也就是说,一个组件只会消失,可见性只会被停用,从未激活:
setVisible(false)
OnClick()
方法中起作用,而
setVisible(true)
不起作用。
你能帮我吗?

你可以试试jQuery方法
show()
hide()
。更多详细信息和。

您可以尝试使用jQuery方法
show()
hide()
。更多详细信息和。

您可以通过重新定义两个链接的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);
  }
}

您可以通过重新定义两个链接的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);
  }
}

与@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;
   }

}

与@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;
   }

}

谢谢,我现在会尝试这种方式,但是我不知道为什么我不能用wicket来做,现有的wicket方法作用于组件可视性谢谢,我现在会尝试这种方式,但是我不知道为什么我不能用wicket来做,现有的wicket方法作用于组件可视性你设置了setOutputMarkupPlaceholderTag(true)在你的链接上?你在链接上设置了setOutputMarkupPlaceholderTag(true)了吗?很高兴知道。我刚刚发现isVisible在每个请求中被调用了多次。很高兴知道。我刚刚发现isVisible在每个请求中被调用了多次。