Wicket ListView предоставляет removeLink для добавления с ListItem. Реализация метода removeLink в источнике класса ListView:
public final Link removeLink(final String id, final ListItem item)
{
return new Link(id)
{
private static final long serialVersionUID = 1L;
/**
* @see org.apache.wicket.markup.html.link.Link#onClick()
*/
public void onClick()
{
addStateChange(new Change()
{
private static final long serialVersionUID = 1L;
final int oldIndex = getList().indexOf(item.getModelObject());
final Object removedObject = item.getModelObject();
public void undo()
{
getList().add(oldIndex, removedObject);
}
});
item.modelChanging();
// Remove item and invalidate listView
getList().remove(item.getModelObject());
ListView.this.modelChanged();
ListView.this.removeAll();
}
};
}
Теперь, если я добавлю ссылку на ListItem и переопределю метод onClick (), как указано выше, и добавлю к нему некоторые дополнительные функции, как я могу переопределить этот фрагмент:
ListView.this.modelChanged();
ListView.this.removeAll();
Поскольку создание экземпляра объекта ListView выполняется анонимным классом ListView и то же самое для ссылки.
add(new ListView("listId", list) {
protected void populateItem(ListItem item) {
item.add(new Link("linkId") {
public void onClick() {
// how can I define
// ListView.this.modelChanged();
// ListView.this.removeAll();
// here?
}
});
}
});
То есть, как ссылаться на внешний анонимный класс из внутреннего анонимного класса? Является ли вызов метода анонимного внешнего класса (хотя и внутреннего) анонимным внутренним классом этого внешнего класса в целом? Возможно ли в Java?