检票口 8 - 扩展机制不起作用



我正在将应用程序从旧版本的检票口迁移到检票口 8。某些页面工作正常(登录等简单页面)。这些页面不使用扩展机制。 当我访问具有该机制的页面时,它不起作用。我不知道这是否是一个错误,但我尝试了所有方法,但找不到解决方案。 我正在使用检票口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;
}

编辑: 基本页面.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>

基本页面.java

@Override
protected void onInitialize() {
super.onInitialize();
add(getContextPanel("contextPanel"));
addTabMenu();
addMenu();
addPatientBar();
}

错误:

根源:

org.apache.wicket.WicketRuntimeException:下面的组件无法呈现。可能的原因可能是: 1)您在代码中添加了一个组件,但忘记在标记中引用它(因此该组件将永远不会呈现), 2) 如果您的组件已添加到父容器中,请确保子容器的标记将它们包含在 中。

[WerklijstPanelXXX [Component id = panelXXX, page = nl.philips.raris.web.werklijst.WerklijstPageXXX,
  1. path = panelXXX, type = nl.philips.raris.web.werklijst.WerklijstPanelXXX, isVisible = true, isVersioned = true], children = [WebMarkupContainer [Component id = filter
  2. ]]] [WebMarkupContainer [组件 id = filter,
  3. page = nl.philips.raris.web.werklijst.WerklijstPageXXX, path = panelXXX:filter, type = org.apache.wicket.markup.html.WebMarkupContainer, isVisible = true, isVersioned = true], children = [Component id = label]]
  4. [组件 id = label, page = nl.philips.raris.web.werklijst.WerklijstPageXXX, path = panelXXX:filter:label, type = org.apache.wicket.markup.html.basic.Label, isVisible = true, isVersioned = true]
  5. [Panel [Component id = filterPanel,
  6. page = nl.philips.raris.web.werklijst.WerklijstPageXXX, path = filterPanel, type = org.apache.wicket.markup.html.panel.Panel, isVisible = true, isVersioned = true]]

    at org.apache.wicket.Page.checkRendering(Page.java:662) at org.apache.wicket.Page.onAfterRender(Page.java:805) at org.apache.wicket.markup.html.WebPage.onAfterRender(WebPage.java:209) at org.apache.wicket.Component.afterRender(Component.java:919) at org.apache.wicket.Component.render(Component.java:2335) at org.apache.wicket.Page.renderPage(Page.java:987) at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:124) at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:236) at org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175) at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:912) at org.apache.wicket.request.RequestHandlerExecutor.execute(RequestHandlerExecutor.java:65) at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:283) at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:253) at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:221) at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:262) at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:204) at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:137) at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:151)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)

Java 和 HTML 组件树应该匹配。

您的 HTML 状态为:<div wicket:id="*contextPanel*"></div>,但您的 Java 代码返回一个 id 为filterPanel的面板。

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`
}

最新更新