0

私は wicket 1.4 で作業しており、2 つの ajax リンク A と B があります。それらを交互に表示したいのですが、リンク B をクリックすると、A の可視性が false (A が消える) に設定され、逆の場合も同様です。setVisibility()リンクの方法で試してみましたOnClick()が、機能しません。つまり、コンポーネントが消えるだけで、可視性が非アクティブ化されるだけで、アクティブ化されることはsetVisible(false)ありません。onClick()メソッドでは機能しますが、機能しsetVisible(true)ません。手伝って頂けますか??

4

3 に答える 3

2

両方のリンクの isVisible メソッドを再定義することで実現できます。そして、1 つのリンクがクリックされると、ブール変数を変更してリンクを再描画するだけです。

これは下書きですが、クラスとメソッドの名前はほとんど覚えていません。

// 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);
  }
}
于 2013-10-14T08:37:31.867 に答える
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;
   }

}
于 2013-10-14T13:32:54.343 に答える