2017-04-26 1 views
0

이전 버전의 wicket에서 wicket 8로 응용 프로그램을 마이그레이션하고 있습니다. 일부 페이지는 정상적으로 작동합니다 (로그인과 같은 간단한 페이지). 이 페이지는 확장 메커니즘을 사용하지 않습니다. 메커니즘이있는 페이지에 액세스 할 때 작동하지 않습니다. 이것이 버그인지는 모르겠지만 모든 것을 시도했지만 해결책을 찾지 못했습니다. wicket을 사용 중입니다. 8.0.0-M5 (안정적인 릴리스가 아닙니다). 누구도 같은 문제가 있었나요? WerklijstPanelXXX.htmlWicket 8 - 확장 메커니즘이 작동하지 않습니다.

<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(); 
} 

WerklijstPageXXX.html

<html xmlns:wicket> 
<body> 
    <wicket:extend> 
     <div wicket:id="panelXXX"></div> 
    </wicket:extend> 
</body> 

: 여기 내 코드입니다 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 [부품 번호 = panelXXX 페이지 = nl.philips.raris.web.werklijst.WerklijstPageXXX 경로 = panelXXX, TYPE = nl.philips.raris.web.werklijst.WerklijstPanelXXX 사실에서 IsVisible =
  2. [WebMarkupContainer [구성 요소 ID = 필터, 페이지 = nl.philips.raris.web.werklijst.WerklijstPageXXX, 경로 = panelXXX : 필터, 유형 =], 자식 = [WebMarkupContainer [구성 요소 ID = 필터]]] org.apache.wicket.markup.html.WebMarkupContainer, isVisible = true, isVersioned = true], children = [Component id = label]]
  3. [구성 요소 id = label, page = nl.philips.raris.web.werklijst .WerklijstPageXXX, path = panelXXX : filter : label, type = org.a
  4. [패널 [구성 요소 id = filterPanel, 페이지 = nl.philips.raris.web.werklijst.WerklijstPageXXX, 경로 = filterPanel, pache.wicket.markup.html.basic.Label, isVisible = true, isVersioned = 참 = org.apache.wicket.markup.html.panel.Panel, 입력에서 IsVisible = 참] 조직에서 org.apache.wicket.Page.checkRendering (Page.java:662) 에서

    . apache.wicket.Page.onAfterRender (Page.java:805) org.apache.wicket.Component.afterRender에서 org.apache.wicket.markup.html.WebPage.onAfterRender (WebPage.java:209) 에서 (구성 요소. 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. 자바 : org.apache.wicket.request.RequestHandlerExecutor.execute (RequestHandlerExecutor.java:65) 에서 org.apache.wicket.request.cycle.RequestCycle $ HandlerExecutor.respond (RequestCycle.java:912) 175) 에서 org.apache.wicket.request.cycle.RequestCycle.execute (RequestCycle.java:283) at org.apache.wicket.request.cycle.RequestCycle.processRequest (RequestCyc le.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. (ServletHolder.java:808) 에서 http.HttpServlet.service at org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1669) at org.apache.shiro.web.servlet.AbstractShiroFilter.exe org.apache.shiro.web.servlet.AbstractShiroFilter $ 1.call (AbstractShiroFilter.java:365) 에서 cuteChain (AbstractShiroFilter.java:449) 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 org.springframework.web.filter에서 .apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal (AbstractShiroFilter.java:362) org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:125)에서 .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) org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter에서 org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java:107에서) ) (ServletHandler.java:1652)

+0

"작동하지 않음"이란 정확히 무엇을 의미합니까? 기본 페이지 만 표시되거나 예외가 발생합니까? 또한 BasePage에 대해 코드 + HTML을 공유하면 아마 좋을 것입니다. BasePage에 올바른 태그가 없으면 태그가 작동하지 않습니다. –

+0

죄송합니다. 오류 및 기본 페이지 항목을 추가하는 것을 잊어 버렸습니다. – fselvatici

답변

2

Java 및 HTML 구성 요소 트리가 일치해야합니다.

사용자의 HTML 상태는 <div wicket:id="*contextPanel*"></div>이지만 자바 코드는 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` 
} 
+0

contextPanel은 기본 페이지의 div와 일치합니다. – fselvatici

+0

답변을 확장했습니다. –

관련 문제