簡體   English   中英

Wicket 8-擴展機制不起作用

[英]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)如果您的組件是在父容器中添加的,請確保對子容器將它們包含在中。

  1. [WerklijstPanelXXX [組件ID = panelXXX,頁面= nl.philips.raris.web.werklijst.WerklijstPageXXX,路徑= panelXXX,類型= nl.philips.raris.web.werklijst.WerklijstPanelXXX,isVisible = true,isVersioned = true],孩子= [WebMarkupContainer [組件ID =過濾器]]]
  2. [WebMarkupContainer [組件ID =過濾器,頁面= nl.philips.raris.web.werklijst.WerklijstPageXXX,路徑= panelXXX:filter,類型= org.apache.wicket.markup.html.WebMarkupContainer,isVisible = true,isVersioned = true] ,子代= [組件ID =標簽]]
  3. [組件ID =標簽,頁面= nl.philips.raris.web.werklijst.WerklijstPageXXX,路徑= panelXXX:filter:label,類型= org.apache.wicket.markup.html.basic.Label,isVisible = true,isVersioned =真正]
  4. [面板[組件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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM