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