[英]Wicket 8 - Extension mechanism does not work
我正在將應用程序從較早版本的wicket遷移到wicket8。某些頁面可以正常工作(簡單的頁面,例如login)。 這些頁面不使用擴展機制。 當我訪問具有該機制的頁面時,它不起作用。 我不知道這是否是錯誤,但我嘗試了所有操作,但找不到解決方案。 我正在使用檢票口8.0.0-M5 (我知道這不是一個穩定的版本)。 有人有同樣的問題嗎? 這是我的代碼:
WerklijstPageXXX.html
<html xmlns:wicket>
<body>
<wicket:extend>
<div wicket:id="panelXXX"></div>
</wicket:extend>
</body>
WerklijstPanelXXX.html
<wicket:head xmlns:wicket>
</wicket:head>
<wicket:panel xmlns:wicket>
<div wicket:id="filter">
<div wicket:id="label"></div>
</div>
</wicket:panel>
WerklijstPageXXX.java
public class WerklijstPageXXX extends BasePage {
private WerklijstPanelXXX werklijstPanel;
public WerklijstPageXXX() {
werklijstPanel = new WerklijstPanelXXX("panelXXX"){};
add(werklijstPanel);
}
@Override
public Panel getContextPanel(String id)
{
return werklijstPanel.getWerklijstFilterPanel();
}
WerklijstPanelXXX.java
public abstract class WerklijstPanelXXX extends Panel {
private static final Logger LOG = LoggerFactory
.getLogger(WerklijstPanelXXX.class);
private Panel filterPanel;
public WerklijstPanelXXX(String id) {
super(id);
WebMarkupContainer upperPanel = new WebMarkupContainer("filter");
filterPanel = new Panel("filterPanel") {
};
add(upperPanel);
upperPanel.add(new Label("label"));
}
public Panel getWerklijstFilterPanel() {
return filterPanel;
}
編輯:BasePage.html(部分)
<div id="body" class="body">
<div id="aside" class="aside">
<div wicket:id="contextPanel"></div>
</div>
<div id="content" class="content">
<div class="padding">
<wicket:child></wicket:child>
</div>
</div>
</div>
BasePage.java
@Override
protected void onInitialize() {
super.onInitialize();
add(getContextPanel("contextPanel"));
addTabMenu();
addMenu();
addPatientBar();
}
錯誤:
根本原因:
org.apache.wicket.WicketRuntimeException:以下組件無法呈現。 可能的原因可能是:1)您已在代碼中添加了一個組件,但忘記了在標記中引用它(因此該組件將永遠不會呈現),2)如果您的組件是在父容器中添加的,請確保對子容器將它們包含在中。
[面板[組件ID = filterPanel,頁面= nl.philips.raris.web.werklijst.WerklijstPageXXX,path = filterPanel,類型= org.apache.wicket.markup.html.panel.Panel,isVisible = true,isVersioned = true] ]
在org.apache.wicket.market.html.WebPage.onAfterRender(WebPage)的org.apache.wicket.Page.onAfterRender(Page.java:805)的org.apache.wicket.Page.checkRendering(Page.java:662)處.java:209),位於org.apache.wicket.Component.afterRender(Component.java:919),位於org.apache.wicket.Component.render(Component.java:2335),位於org.apache.wicket.Page.renderPage( org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:124)處的Page.java:987)org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java: 236)at org.org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175)at org.apache.wicket.request.cycle.RequestCycle $ HandlerExecutor.respond(RequestCycle.java:912)在org org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:283)上的.apache.wicket.request.RequestHandlerExecutor.execute(RequestHandlerExecutor.java:65)org.apache.wicket.request.cycle.RequestCycle .processRequest(RequestCycle .java:253),位於org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:262),位於org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:221)。 org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:137)處的apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:204)在javax.servlet.http.Http.HttpServlet.service( org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808)處的javax.servlet.http.HttpServlet.service(HttpServlet.java:790)處的HttpServlet.java:687)org.eclipse.jetty.servlet處的ServletHolder.java:808) org.apache.shiro.web.servlet.AbstractShiroFilter $ 1.call(.org上的.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1669)在org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)在org.apache.shiro.web.servlet.AbstractShiroFilter $ 1.call( org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)處的AbstractShiroFilter.java:365)org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java)處的AbstractShiroFilter.java:365) :83),位於org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362),位於org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362),位於org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)。 org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.org)上的org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)上的shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) java:262)位於org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1652)位於org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:151)位於org.springframework org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1652)上的.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
Java和HTML組件樹應匹配。
您的HTML狀態為: <div wicket:id="*contextPanel*"></div>
,但是您的Java代碼返回了一個ID為filterPanel
的Panel。
public WerklijstPageXXX() {
werklijstPanel = new WerklijstPanelXXX("panelXXX"){};
add(werklijstPanel);
}
@Override
public Panel getContextPanel(String id) // HERE id is ignored
{
return werklijstPanel.getWerklijstFilterPanel(); // This returns a panel with id `filterPanel`
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.