2013-10-14 48 views
0

我正在使用wicket 1.4,我有兩個ajax鏈接A和B.我想交替顯示它們,我的意思是當我單擊鏈接B時,可見性設置爲假(A消失),反之亦然。我嘗試了setVisibility()上的OnClick()方法的鏈接,但它不起作用,也就是說,一個組件只會消失,只能關閉可見性而不會激活:setVisible(false)onClick()方法的工作原理和setVisible(true)不是。 你能幫助我嗎?在onClick()方法中使用setVisible()更改Ajax鏈接的可見性

+0

您是否在鏈接上設置了setOutputMarkupPlaceholderTag(true)? – pikand

回答

1

您可以嘗試使用jQuery方法show()hide()。更多詳情herehere

+1

謝謝我現在就試試這個方法,但是我不明白爲什麼我不能用wicket來做,現有的wicket方法在組件可見性上起作用。 – andPat

2

您可以實現它redfining兩個鏈接的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); 
    } 
} 
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; 
    } 

} 
+0

好的。我剛剛發現,isVisible被稱爲每次請求多次。 http://wicketinaction.com/2011/11/implement-wicket-component-visibility-changes-properly/ – polypiel