2016-11-21 5 views
1

WelcomePage.javaКалитка: org.apache.wicket.markup.MarkupNotFoundException

import org.apache.wicket.markup.html.WebPage; 
import org.apache.wicket.markup.html.basic.Label; 
import org.apache.wicket.model.Model; 

import java.io.Serializable; 
import java.util.ArrayList; 
import org.apache.wicket.markup.html.basic.Label; 
import org.apache.wicket.markup.html.navigation.paging.PagingNavigator; 
import org.apache.wicket.markup.repeater.Item; 
import org.apache.wicket.markup.repeater.data.DataView; 
import org.apache.wicket.markup.repeater.data.ListDataProvider; 
import org.apache.wicket.model.IModel; 
import org.apache.wicket.model.Model; 
import com.ui.*; 



public class WelcomePage extends WebPage{ 

private static final long serialVersionUID = 1L; 

public WelcomePage(){ 

    Contact contact = null; 
    final List<Contact> list = new ArrayList<Contact>(); 

    char character; 

    // a - z 
    for(int i = 97; i < 123; i++){ 
     character = (char) i; 
     contact = new Contact(String.valueOf(character)); 
     list.add(contact); 
    } 

    final DataView<Contact> dataView = 
     new DataView<Contact>("simple", new ListDataProvider<Contact>(list)){ 

      private static final long serialVersionUID = 1L; 

      @Override 
      public void populateItem(final Item<Contact> item){ 
       final Contact user = item.getModelObject(); 
       item.add(new Label("id", user.getId())); 
      } 
     }; 

    dataView.setItemsPerPage(10); 

    add(dataView); 

    add(new PagingNavigator("navigator", dataView)); 
} 

} 

WelcomePage.html

<!DOCTYPE html> 
<html> 

<body> 

<span wicket:id="lbl"> </span> 


<wicket:extend> 

<table cellspacing="0" class="dataview"> 
<tbody> 
    <tr wicket:id="simple"> 
    <td><span wicket:id="id">Test ID</span></td> 
    </tr> 
</tbody> 
</table> 

<div wicket:id="navigator"></div> 

</wicket:extend> 
</body> 
</html> 

выше код для отображения DataView - https://cwiki.apache.org/confluence/display/WICKET/A+Simple+DataView+Example

Когда я выполняя вышеуказанный код, я получаю следующую ошибку.

Last cause: Can not determine Markup. Component is not yet connected to a parent. [Page class = com.kaiinos.kriti.ui.WelcomePage, id = 12, render count = 1] 

StackTrace - первопричины:

org.apache.wicket.markup.MarkupNotFoundException: Can not determine Markup. Component is not yet connected to a parent. [Page class = com.kaiinos.kriti.ui.WelcomePage, id = 12, render count = 1] 
at org.apache.wicket.Component.getMarkup(Component.java:751) 
at org.apache.wicket.Component.internalRender(Component.java:2378) 
at org.apache.wicket.Component.render(Component.java:2341) 
at org.apache.wicket.Page.renderPage(Page.java:1018) 
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:895) 
at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) 
at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:265) 
at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:222) 
at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:293) 
at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:261) 
at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:203) 
at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:284) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
at java.lang.Thread.run(Thread.java:745) 

Edit - Модифицирован код Java и HTML, но получить то же error.I я просто новичок. Любая помощь будет оценена. Спасибо заранее.

+0

Проверьте разметку, недействительно и декларация XML должен прийти первым. – svenmeier

+0

... и вы используете , имеет ли наш BasePage разметку? – svenmeier

+1

Исключение означает «WelcomePage», но ваш код Java относится к Sub1Page. Кроме того, ваш HTML является неполным. Мне нужны закрывающие элементы, например и' следует использовать, когда страница расширяет другую, содержащую '' внутри нее. Я бы посоветовал вам начать с руководства пользователя Wicket: http://wicket.apache.org/learn/#guide –

ответ

0

Есть несколько вещей, которые не соответствуют вашему коде. Если вы хотите узнать, как писать калитки (вместо того, чтобы просить о помощи с четко определенными вопросами), StackOverflow не подходит для вас. Как было предложено @ мартин-г, вы можете посмотреть в Wicket user guide

Что касается текущего кода:

  • <wicket:extend> определяет набор HTML, который занимает место в <wicket:child> тег в разметке родительского компонента , Это означает, что все, что находится за пределами <wicket:extend>, например, ваш <span wicket:id="lbl"> </span>, игнорируется.
  • с использованием <wicket:extend> предполагает, что существует родительский компонент со связанным HTML-файлом, содержащим <wicket:child>. Родительский компонент для вашего WelcomePage - это Wicket's WebPage, но он не имеет связанного HTML-файла. Это означает, что вы не можете использовать <wicket:extend> в своем WelcomePage.
  • Конструктор вашего WelcomePage называется Sub1Page. Я предполагаю, что это осталось от вашего другого кода? В любом случае это неверно.

Попробуйте переписывание HTML для WelcomePage на что-то вроде:

<!DOCTYPE html> 
<html xmlns:wicket> 
<body> 

<table cellspacing="0" class="dataview"> 
<tbody> 
    <tr wicket:id="simple"> 
    <td><span wicket:id="id">Test ID</span></td> 
    </tr> 
</tbody> 
</table> 

<div wicket:id="navigator"></div> 
</body> 
</html> 
+0

Большое спасибо за объяснение .... Измененный код HTML, как предлагалось, но получение ошибки как - Последняя причина: Невозможно найти компонент с id 'simple' in [Page class = com.kaiinos.kriti.ui.WelcomePage, id = 0, render count = 1] \t Ожидаемое: ': simple'. \t Найдено с похожими именами: '' – Spandana

+0

Это исключение означает, что ваш html ссылается на 'wicket: id =" simple "', но вы не добавили компонент, чей 'id' является« простым ». В вашем примере вы создаете DataView dataView с идентификатором «simple» и добавляете его на страницу, поэтому я не уверен, почему эта ошибка возникла. Вы уверены, что по-прежнему добавляете этот компонент на страницу, и этот идентификатор по-прежнему совпадает с идентификатором wicket: id в html? – Buurman