I am trying to figure out what tag is beeing expected... This is my base page markup
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " http://www.w3.org/TR/html4/loose.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> <html> <wicket:head> </wicket:head> <body> <div wicket:id="tabs" class="tabpanel">[tabbed panel will be here]</div> <div class="spacer"></div> <wicket:child/> </body> </html> This is my basepage implementation public class BasePage extends WebPage { private final List<ITab>tabs = new ArrayList<ITab>(); public BasePage() { inicializaComponentes(); add(new AjaxTabbedPanel("tabs", tabs)); } @SuppressWarnings("unchecked") private void inicializaComponentes(){ tabs.add(new CadastroTab(new Model ("Cadastro"))); } } This is the implementation of CadastroTab public class CadastroTab extends AbstractTab { private static final long serialVersionUID = 4682446014181156021L; public CadastroTab(IModel<String> id) { super(id); // TODO Auto-generated constructor stub } @Override public Panel getPanel(String arg0) { // TODO Auto-generated method stub Panel painel = new CadastroPanel(arg0); return painel; } } This is the markup of CadastroPainel <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " http://www.w3.org/TR/html4/loose.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> <html> <body> <div wicket:id="tabs" class="tabpanel">[tabbed panel will be here]</div> </body> </html> This is the Implementation of CadastroPanel public class CadastroPanel extends Panel { private static final long serialVersionUID = 4682446014181156004L; private final List<ITab> tabs = new ArrayList<ITab>(); public CadastroPanel(String id) { super(id); inicializaTabs(); add(new AjaxTabbedPanel("Cadastro", tabs)); // TODO Auto-generated constructor stub } private void inicializaTabs() { tabs.add(new AbstractTab(new Model("Categoria")) { public Panel getPanel(String panelId) { return new CadastroCategoriaPanel(panelId); } }); } } And the last part if the Markup of CadastroCategoriaPanel and its markup public class CadastroCategoriaPanel extends Panel { private static final long serialVersionUID = 4682446014181156010L; public CadastroCategoriaPanel(String id) { super(id); // TODO Auto-generated constructor stub } } <?xml version="1.0" encoding="UTF-8"?> <html xmlns="http://www.w3.org/1999/xhtml" > <wicket:panel> <br/> This is tab-panel 3 </wicket:panel> </html> The error that I get is this WicketMessage: Tag expected [markup = file:/E:/Daniel/Projetos/ecommFwkBackOffice/target/classes/com/jasp/ecommfwk/pages/common/layout/panels/CadastroPanel.html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " http://www.w3.org/TR/html4/loose.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> <html> <body> <div wicket:id="tabs" class="tabpanel">[tabbed panel will be here]</div> </body> </html>, index = 5, current = [Raw markup]] Root cause: org.apache.wicket.markup.MarkupException: Tag expected [markup = file:/E:/Daniel/Projetos/ecommFwkBackOffice/target/classes/com/jasp/ecommfwk/pages/common/layout/panels/CadastroPanel.html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " http://www.w3.org/TR/html4/loose.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> <html> <body> <div wicket:id="tabs" class="tabpanel">[tabbed panel will be here]</div> </body> </html>, index = 5, current = [Raw markup]] at org.apache.wicket.markup.MarkupStream.throwMarkupException(MarkupStream.java:465) at org.apache.wicket.markup.MarkupStream.getTag(MarkupStream.java:269) at org.apache.wicket.MarkupContainer.renderAssociatedMarkup(MarkupContainer.java:639) at org.apache.wicket.markup.html.panel.Panel.onComponentTagBody(Panel.java:114) at org.apache.wicket.Component.renderComponent(Component.java:2596) at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1521) at org.apache.wicket.Component.render(Component.java:2421) at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1399) at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1586) at org.apache.wicket.MarkupContainer.renderAssociatedMarkup(MarkupContainer.java:668) at org.apache.wicket.markup.html.panel.Panel.onComponentTagBody(Panel.java:114) at org.apache.wicket.Component.renderComponent(Component.java:2596) at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1521) at org.apache.wicket.Component.render(Component.java:2421) at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1399) at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1537) at org.apache.wicket.Page.onRender(Page.java:1522) at org.apache.wicket.Component.render(Component.java:2421) at org.apache.wicket.Page.renderPage(Page.java:926) at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.respond(BookmarkablePageRequestTarget.java:262) at org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:105) at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1200) at org.apache.wicket.RequestCycle.step(RequestCycle.java:1271) at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1370) at org.apache.wicket.RequestCycle.request(RequestCycle.java:501) at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:455) at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:288) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) at org.mortbay.jetty.Server.handle(Server.java:295) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:503) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:827) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:511) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:210) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379) at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:226) at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442) -- "Two rules to succeed in life: 1 - don´t tell people everything you know." -------- We shall go on to the end. We shall fight in France We shall fightover the seas and oceans. We shall fight with growing confidence and growing strength in the air. We shall defend our island whatever the cost may be We shall fight on beaches, we shall fight on the landing grounds, We shall fight in the fields and in the streets, We shall fight on the hills. We shall never surrender. Winston Churchill