Правильный ответ уже дан, вы должны добавить компоненты к AjaxTarget. Тем не менее, ради создания большего количества "Wickety" кода, вы можете переписать ваш класс примерно так:
public class TestPage extends WebPage {
private AjaxLink link1;
private AjaxLink link2;
public TestPage() {
super();
final Model<Boolean> link1Model = new Model<Boolean>(Boolean.True);
final Model<Boolean> link2Model = new Model<Boolean>(Boolean.False);
link1 = new AjaxLink<Boolean>("link1", link1Model) {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
this.getModel().setObject(!this.getModel().getObject());
target.addComponent(this);
}
};
link2 = new AjaxLink<Boolean>("link2", link2Model) {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
this.getModel().setObject(!this.getModel().getObject());
target.addComponent(this);
}
};
link1.setOutputMarkupId(true);
link2.setOutputMarkupId(true);
link1.add(new AttributeModifier("class", true, new Model<String>() {
public String getObject() {
return link1Model.getObject() ? "active" : "inactive";
}
}));
link2.add(new AttributeModifier("class", true, new Model<String>() {
public String getObject() {
return link1Model.getObject() ? "active" : "inactive";
}
}));
add(link1);
add(link2);
}
}
Используются модели, что рекомендуется в Wicket. Тем не менее, там происходит тяжелое дублирование кода, поэтому я мог бы предложить перейти к отдельному компоненту:
public final class ActiveInactiveLink extends AjaxFallbackLink<Boolean> {
public ActiveInactiveLink(String id) {
super(id, new Model<Boolean>(Boolean.True));
this.add(new AttributeModifier("class", true, new Model<String>() {
public String getObject() {
Model<Boolean> model = ActiveInactiveLink.this.getModel();
return model.getObject() ? "active" : "inactive";
}
}));
this.setOutputMarkupId(true);
}
@Override
public void onClick(AjaxRequestTarget target) {
this.getModel().setObject(!this.getModel().getObject());
target.addComponent(this);
}
@Override
public void setModel(IModel<Boolean> model) {
if(model == null)
return;
this.model = model;
}
}
public class TestPage extends WebPage {
private AjaxLink link1;
private AjaxLink link2;
public TestPage() {
link1 = new ActiveInactiveLink("link1");
link2 = new AjaxLink<Boolean>("link2");
add(link1);
add(link2);
}
}
Все это, конечно, не проверено и не скомпилировано, поэтому никаких гарантий. :)
Кроме того, ребята из списка рассылки Wicket наверняка придут к чему-то более элегантному ...
Наслаждайтесь.