Возможно ли (или как лучше всего) иметь собственную панель с поведением компонентов?Особенно с вложением HTML ...
Я хочу что-то вроде этого:
public HeaderPanel(String id) { /* extends Wicket Panel */
super(id);
add(new Link(ID_HOME_LINK, null) {
private static final long serialVersionUID = 1L;
{
add(new Image(ID_HOME_LOGO, new ContextRelativeResource("img/logo.png")));
}
@Override
public void onClick(AjaxRequestTarget target) {
setResponsePage(((BasicPage)getPage()).getLogoLinkPage());
}
});
}
С HTML:
<!DOCTYPE html>
<html>
<body>
<wicket:panel>
<a wicket:id="home-link">
<img wicket:id="home-logo" src="img/logo.png" title="LearnMe" style="max-height: 65px;" /> <!-- HERE is problem - I would like to set children here -->
</a>
</wicket:panel>
</body>
</html>
И это намерение в Link (этомоя "настраиваемая" панель, которая обрабатывает ссылки):
public Link(String id, IModel<String> model, boolean ajax) { /* Extends Wicket Panel */
super(id);
this.ajax = ajax;
this.model = model;
setRenderBodyOnly(true);
if (ajax) {
add(link = new AjaxLink<String>(ID_LINK) {
@Override
public void onClick(AjaxRequestTarget target) {
Link.this.onClick(target);
}
});
} else {
add(link = new org.apache.wicket.markup.html.link.Link<String>(ID_LINK) {
@Override
public void onClick() {
Link.this.onClick(null);
}
});
}
}
С соответствующим HTML:
<html>
<body>
<wicket:panel>
<a wicket:id="link"></a> <!-- HERE is problem - I don't know, which ones and how many components go there -->
</wicket:panel>
</body>
</html>
Теперь я получаю это исключение:
Last cause: Close tag not found for tag: <a wicket:id="home-link" id="home_link3">. For Components only raw markup is allow in between the tags but not other Wicket Component. Component: [Link [Component id = home-link]]
Может быть, ячто-то не так с емкостью Panel или что-то ненужное с компонентом Link, но я ищу идею вложения / наследования панелей в одном шаблоне, как это обычно бывает с компонентами в Wicket (например, ссылка HeaderPanel была Wicket Link, а не моя настраиваемая панель "Link" -это работает, но это не "общее" решение).